Cloud hosting is generally very flexible is numerous ways depending on the provider. If you need a bigger server, you would normally have to add the hardware yourself, or even switch to a different box for major changes. With cloud hosting it's usually done via a simple interface and the resize can take from several minutes to several seconds depending on the system.
Cloud hosting was originally designer for high availability, so in the case of a hardware failure the downtime is very small - typically under a minute depending on the system. However today it's usually very scalable and is a great alternative to dedicated servers.
Cloud hosting can get expensive on a pay-as-you-go model, so you'd usually need to buy a package or make some sort of contract or reservation for lower prices. There are two particular hosts you may want to look into that provide some very neat services:
- VPS.net - pretty cheap, extremely flexible and scalable. Supports scheduled and automatic scaling; usually takes under a minute to scale up or down without rebuilding the disk (or a few minutes when rebuilding the disk). Supports Linux servers, with FreeBSD in beta and Windows beta coming soon.
- GoGrid - expensive as pay-as-you-go, but reasonable in packages. Has the ability to mix dedicated and cloud servers in the same network with little effort. Supports Windows and Linux servers.
I can't say anything about co-location as I haven't worked with physical servers, so you may want to look into the other answers for information on that.