If you want to be able to move your website with almost NO downtime than the first thing you need to do is perform your DNS mgmt on a third party service and NOT using the DNS mgmt services (via cpanel) of your web hosting provider since changing DNS servers can take anywhere up to 36 hours.
I would recommend you open an account at sitelutions.com. They offer free DNS mgmt. Use your domain registrar's control panel to assign sitelutions nameservers as the nameservers for your domain(s). Then you need to create A,MX and CNAME records for any domains and subdomains with the IP addres being set to the IP address of our current web host's server.
Now if you need to change webhosts you can use the following steps to ensure as little downtime as possible.
1. About a day before you plan to move set the TTL to 60 seconds for all the DNS records (A,MX,CNAME, etc..) using your sitelutions DNS control panel. This way you can easily update the value of the DNS records when you change webhosts and within 60 seconds of changing the records the domain names will now resolve to your new host, but don't chane the record values yet
2. Transfer all your static files (ones that don't change with user access) to your new host through FTP.
3. Disable DB and dynamic file access features on your old host Post a nice message indicating why your doing this and that these service (forums, etc...) will be back up very soon.
4. Transfer your dynamic files and DBs to your new host and install them in the correct places.
5. Quickly test your new host is working fine by overiding your PCs DNS with the new host IP address (For a windows PC you would edit the file "C:\WINNT\system32\drivers\etc\hosts")
6. When you are satisified that your new host is working fine revert your PCs host file back to the default (delete the temporary overides) and then login to the DNS control panel at sitelutions and change the IP address of all records from that of the old host's server to the new host's server.
7. Smile since your new site is up and running on the new host with minimal downtime. In fact all your users saw is that all your dynamic features were temporarily disabled but your site really never went down. This is a great way to not lose customers, since what web visitors hate most is a site being down completly with no explanation. If some services are temporarily disabled with a good explanation most users will be more than satisfied.
8. You can also you this technique to quickly change to a backup host when your main host goes down and you don't even need to be able to login into to the old host to do that (Provided you makes nightly backups onto your backup host). Since some hosts just "go out of business" and leave you hanging this is a great way to ensure your business against that happening.
Please feel free to add any other tips you may have to this thread.