What I think is optimal is varies slightly based on whether or not you use a laptop for development.  With a desktop, I'd prefer to go dual hard-drive and use the second hard drive for VMs and with a laptop (unless you have one of the very rare laptops that can house 2 internal hard drives) use an external hard drive for your VMs.
Sure, you'll lose a little bit of performance by developing in the VM but you'll gain a LOT of utility and safety and potentially save yourself a LOT of time.
I'd recommend buying a single HDD per big project (perhaps share one for smaller ones) and make sure it's a 7200 or 10k rpm drive.  When you're done with the project, take that hard drive and just store/archive it.  This way if you ever go back on that project again, you already have your entire development environment setup, working, and ready to go.
As for setting up these VMs, you could always take a snapshot of a partially setup and relatively clean VM and base all future VMs off of that one.  This will also save you a lot of time setting up your dev environment for future projects.
The last benefit which is probably the most obvious is that your dev environment isn't dependent upon any machine configuration.  As long as you properly backup your VMs, you should spend trivial time recovering from a complete hardware failure.  If you need to upgrade hardware or whatever, fine, all you have to do to keep your dev environment going is move your HDD from one machine to the other.  And the greatest thing imo is that this means you can install whatever you want on your host machine without worrying about it interfering with your VM.  For me, that means I can install games on my dev laptop.  
This is my $0.02 worth.
-Jax