Why not just use symbolic links? I too have multiple installations of ghc (at the moment, only two), and I choose between them using a symbolic link:

book % ls -l /usr/local | grep ghc
lrwxr-xr-x   1 root  wheel    10 Jan 12 00:05 ghc -> ghc-6.12.1
drwxr-xr-x   7 dave  wheel   238 Dec 25 10:46 ghc-6.10.4
drwxr-xr-x   7 dave  wheel   238 Jan  8 21:52 ghc-6.12.1

(/usr/local/ghc/bin is on my PATH.)

My install scripts use the --prefix flag.

This sounds very similar to what I do with multi-ghc. I just use a Bash script to manage the symlinks for me and a Makefile to do the configure/make install. That's really all multi-ghc is at the moment.
 
I also make the actual installations user-writeable, so that I DON'T have to use sudo at any point after setting up the directories. This gives me a nice proof that no script I then call is messing up other parts of my system. (One can still accidentally still do something "locally", creating an unannounced subdirectory of $HOME e.g. using cabal-install.)

 To sudo or not to sudo: doesn't matter to me (or multi-ghc). :)

GHC is way too important to be treated that way, so I follow (roughly) Nils' strategy.

The use of stow also seems similar, though perhaps more general. I currently keep track of the "current" GHC, and it seems stow may not do that, though I doubt it should be difficult to extend.

Regards,
Sean