Welcome to the web hosting shell game.
First, you can drop your dns TTL to something absurdly low -- we use 60 seconds when we are about to move things. That said, not everything honors your TTL value.
A lot depends on specifics but there are a few ways to do this. Probably the most effective would be to push the front end out to a proxy, have that proxy back-haul to your current site then, when ready, repoint the proxy at the new host. I would suggest using a service such as cloudflare as the proxy rather than handling it yourself.
Another approach would be to use a second, temporary domain name while things propigate. To do so setup your new app to listen on new.example.com as well as www.example.com; then when ready setup the old server to redirect all requests to new.example.com. Give it a day or so then setup the new server to redirect new.example.com to www.example.com so you keep a cannonical domain name.