Pardon my ignorance, but how do you hit the switch? Or, rather, what is the switch? DNS is slow to propagate, and if you have some kind of server for your "switch" then isn't that still a single point of failure?
Great question. In the common case, the solution is to set low TTLs (time to live attributes: they tell the DNS server how long to cache the name) on the DNS records, so they expire quickly.
You can also run a pair of "front end" servers at all times, and use magic in the back-end to replicate the DB between sites. Depending on the type of site in question this can be really easy or really hard.
Another (generally commercial hardware) solution is to receive the query to one DNS server. This DNS server waits to respond for a few milliseconds while it sends a copy of the query to the other DNS server. They have different answers for the question (dns-east will return the IP for www-east, likewise for dns-west and www-west). They return the answers at the same time, and the closer server "wins" by getting to the recipient faster. This is called GSLB, Global Server Load Balancing.
But your GSLB requires your DNS server to be up, which it won't be if the datacenter blacks-out. Ditto if you're running a "pair of 'front end' servers".
Shouldn't DNS records have a reserve address too then the client could decide if failure had occurred to use the alternate address?