Not an expert by any means but we have 3CX running as a guest Virtual Machine on a two host cluster built on MS Virtual Server 2005R2. This cluster supports 4 other highly available virtual machines. I was impressed during failover tests how quickly the 3CX system recovers. There will be about a 5 to 10 minute interuption of service during a planned "save state" move of the VM to the other clustered host. However what I found very interesting is there is no wait for extensions and lines to re-register when done in this manner. They all seem to remain in the state they were in on the first host when moved to the new host.
In a hardware failure such as you mention the VM move would be much quicker, but any data in memory would be lost. I have not tested this to see what happens to extension and line registrations in this senario.
Resource I used is http://www.microsoft.com/windowsserversystem/virtualserver/techinfo/hacsolutions.mspx
Mark