I have two VPS servers from two different hosting companies. I want to make some fallback to second VPS if first is not available (preferably automatic). I understand that if I have a single load-balancer with root access I can setup it to switch between different backend servers. But is it possible to make it with VPS from two different hosting companies? Thanks.
It all depends a bit on the situation. A standard way of achieving higher availability is indeed the loadbalancer. The problem is that you need at least two loadbalancers
A little drawing to make it clear:
The loadbalancer stands before all backend servers ad proxies all request to the backend servers. A secondary loadbalancer stay online as well and checks if the primary balancer is reachable. If in any case the primary loadbalancer will go down, the secondary loadbalancer will take over his IP and start serving.
Advantages (of this confguration)
 Of course the loadbalancer needs more bandwidth than the sum of the maximum bandwidth of the backend servers (this is not necessarily the maximum bandwidth of the interface depending on the application)
 This is not only good. If both backends are at or near their maximum capacity and the loadbalancer takes one down, the other backend will get all the traffic and the whole thing ill fall apart. This requires good tweaking
 In fact the loadbalancer must do this if he doesnt want to route the traffic blindly by connection.
 Maybe in you have to reestablish a new ssl connection after the beckend if you don't trust the backend network
 You have to make sure that when the primary goes down, it stays down until you want it up again to prevent things like toggeling and IPs used twice
 You have to make sur that the connection between the loadbalancers is very very very stable
If you have single load balancer, it wouldn't help too much in terms of high availability, you would still have a single point of failure. CDN used to be a way to go, but you might want to wait for few more answers...
Even if you have a load balancer in a third location (you can configure them in HA active-standby) you're still prone to network issues. Since your two VPS are presumably located in two different datacenters you might end with bad network performance, as your loadbalancer would contact the VPS, make the requests and forward responses to the clients, thus if the datacenter containing the balancer goes offline or experiences network issues your 2 VPS are useless.
A rough conf could be:
I'm making the following assumptions:
Anyway, there's no automatic failure detection and response in this configuration.
Everything what have been posted is fine and correct. However I can see a different approach to reach the described goal (fallback system hosted by a third party hosting company):
With this method the DNS provider checks the availability of your main system and switches to a fallback system in case the checked system doesn't respond properly.
There are quite a lot of suppliers on the market providing this type of service (Amazon Route 53, DNS Made Easy ...). Additionally you will get a faster DNS system (world-wide spread, any-cast listening DNS servers).
But - this is not high-availability! In case of an outage it needs some time to recognize the outage and adjust the DNS. But maybe it's already enough for your requirements.
Probably too late for this to be helpful because you already have your VPS's set up (although I don't know with which providers)
But I was presented with a similar situation a while back. If I remember correctly with Amazon EC2 you can have two nodes in different availability zones (availability zones exist within regions), and Elastic load balance between the two, the odds of two availability zones going down at the same time, while not impossible, are pretty slim and so the risk is spread.
There is a charge for data crossing availability zones, but from what I remember its negligible.