EDIT: This answer was written over a year ago. See my addendum at the bottom.
@ICR: It IS absolutely impossible, no "but".
A Rainbow Table helps to get a match for a given Hash, but you will NEVER be able to get the exact input (well, there is indeed a chance of 1 to unlimited to get it, but you would not know whether or not that was the exact input). If you could get the exact Input from a 128-Bit Hash, you would just have invented the best compression algorhithm in the world.
There are unlimited possibilities that will all produce the exact same hash.
Let me explain a bit more in detail.
Image a Hash algorithm where "foo" and "bar" will result in the same hash, let's say "HAsh1!".
Now, you get the Hash - HAsh1!. How do you know if the input data was "foo" or "bar"? You can't, and you will never ever be able to.
Now, what is the problem and what are rainbow tables used for?
Imagine you hack my user database, and you check the Users-Table.
My Login is usually stored in cleartext, so you know to log in with "mstum".
But my password is hashed. I used "trez" with incidentially also hashes to HAsh1!.
You check my hashed password, which us HAsh1!, but you do not know that my plaintext password is trez.
But the point: You don't NEED to know that. You grab your Rainbow Table for HAsh1! and see "foo".
So you go to the page you just got the user data for, and you log in as "mstum" with "foo". Despite me having used "trez" as password, you will successfully log in with "foo" because the hash is exactly the same.
This is called a colision: 2 Input Values having the same hash. On MD5, there are only 128 Bit, whereas on SHA-512 there are 512 Bit, but you WILL still have infinite inputs which will result in the same hash.
So: Rainbow tables solve one of the two problems hackers want to solve - it allows them to authenticate as any user they got the hash for.
The second problem that hackers have is a bit off-topic: How do you give the user some file (for example, a manipulated Setup File that includes Malware or that is a modified version of a tool that does bad stuff) that will successfully have the same Hash? When you check some popular download pages or open source sites, they will have "Setup.exe, MD5 Hash: f387......". While there WILL BE infinite possibilities to produce something that hashes to f387..., the hacker needs to modify the Setup.exe in a way that it contains his Malware AND hashes to f387.... This hard, but possible. On MD5, this is now possible with a reasonable timeframe, which is why MD5 should not be used anymore unless a standard requires it or if security is not a concern.
For Gravatar, Security does not need to be a concern, so MD5 is fine and they want something that is fast since it's not security-related.
Edit: Here is a real world example, the one that was used to show collisions in MD5:
d131dd02c5e6eec4693d9a0698aff95c 2fcab58712467eab4004583eb8fb7f89
55ad340609f4b30283e488832571415a 085125e8f7cdc99fd91dbdf280373c5b
d8823e3156348f5bae6dacd436c919c6 dd53e2b487da03fd02396306d248cda0
e99f33420f577ee8ce54b67080a80d1e c69821bcb6a8839396f9652b6ff72a70
and
d131dd02c5e6eec4693d9a0698aff95c 2fcab50712467eab4004583eb8fb7f89
55ad340609f4b30283e4888325f1415a 085125e8f7cdc99fd91dbd7280373c5b
d8823e3156348f5bae6dacd436c919c6 dd53e23487da03fd02396306d248cda0
e99f33420f577ee8ce54b67080280d1e c69821bcb6a8839396f965ab6ff72a70
both hash to 79054025255fb1a26e4bc422aef54eb4.
So, given the hash - how do you know which one of the two was used?
Addendum: I still stand by my original point: Decoding an e-Mail address from a Hash is impossible. You can brute force or use a rainbow table and you might get lucky to get an e-Mail address. As there are infinite inputs to a hash, there are consequently also infinite inputs that look like an e-mail address, but the chances of getting a valid one are really insignificant. So decoding from Hash is not an option. But there are some options that I haven't originally considered, outlined for example here. Basically, you can guess. I post with my real name, so you can try all sorts of combinations of michaelstum@, mstum@, michael.stum@ with all the big providers and run them through a hash function. This does not work in all cases, but as many people use GMail, Yahoo or Hotmail, the chance to hit is not that low. Would salting solve that? Maybe. Maybe not. You would have to figure out the salt, which almost certainly requires brute-force approaches. At least you have a known plaintext (your own e-Mail address), so you can run this brute force on your machine. Having a different salt per-user might be more secure, but I don't know if that could cause a significant risk of creating collisions.
Thinking about this, I think that salting with a long, random salt would indeed improve security as it defeats the one viable approach of guessing. I'd rather recommend using disposable/different e-Mail addresses as you never know what can happen (website databases get hacked every day, and those e-Mail addresses are certainly sold to spammers), but I realize that is impractical for people without a domain and a catchall-mailbox.