This is exactly what I do to transfer sites with static content between hosts with ZERO downtime:
1. Get all your files, databases, etc. and upload them to your new host.
2. Edit your hosts file (C:\Windows\System32\Drivers\etc\hosts on Vista) to point your domain name to the IP of your account on the new host. Google this if you don't know what I'm talking about - there are a million tutorials.
3. Go to yoursite.com. Test out your site on the new host. Make sure everything works.
4. Point your domain at your new name servers. That's it.
For dynamic sites (forums, social networking sites, etc. anything where users post content), things are a bit more complicated and you're going to go down for a few minutes, so hire a sysadmin to do it for you.
Basically you want to prevent one user from going to yourdomain.com and getting your site on the old host while another one goes to yourdomain.com and gets the site on your new host. This happens because DNS records are cached until they expire - so a user who visits your site just before you transfer it is going to still get the site on the old host, sometimes for up to 72 hours after you've transfered it.
The way you prevent this is by pointing domain name at a temporary DNS server with very low TTL values (300 seconds, for example), and then updating the A records of your domain as soon as you move your site to the new hosting. You then put a message up on the old hosting saying "temporarily offline" for anyone who still has the old A records.