My usual approach for an IP change:
1) Drop the TTLs.
2) Add two new DNS records:
www-new.example.com IN A new.ip.address.here
www-old.example.com IN A old.ip.address.here
3) On the old web server, add a ServerAlias www-old.example.com (or your httpd's equivalent).
4) On the new web server, add a ServerAlias www-new.example.com.
5) On the new web server, put a maintenance-in-progress placeholder on example.com and
www.example.com. Test using www-new.example.com, if required.
6) When the time comes, replace the old web server's configuration for example.com &
www.example.com with a similar placeholder, change the example.com and
www.example.com A records to point at the new IP address, then do that voodoo that you do to move everything over to the new web server.
7) As soon as you're ready to "go live" on the new server, zap the placeholder and let traffic fly. On the old server, install a redirect on example.com and
www.example.com to www-new.example.com.

After a couple days, nuke the old instance and either make www-new.example.com go away, or redirect it to one of example.com or
www.example.com depending on your canonicalization policy.
This is a "break-before-make" move; your site will be "down" for some amount of time while you copy files, move the database, and test stuff. There are ways to do this with no downtime, too, but that gets fairly specific and specialized.