There is no "reversal" however it is possible for one hash to = more than one bit of text. What you were able to do with pre-salted hashes was just what I said, brute force the hash to find what the hash was equal to. Just with any encryption function, I am sure that md5 could be statistically calculated to atleast approximately correct with some sort of experiment. A very simple brute force could work similar to this:
CODE
do {
$ascii_to_text = array( /*ascii values*/ )
$passmaxlength = 10;
$passminlength = 4;
$password = $ascii_to_text[1].$ascii_to_text[64].$ascii_to_text[192].$ascii_to_text[1];
$haxzor = md5($password);
} while( $md5hash != $haxor );
echo $password;
Obviously the above will not work as it does not load dynamically. I just wanted to give some sort of visual reference to what I mean. Expanding further, as long as the hacked password does not equal the stolen md5 hash we keep trying. On each loop we increment the ascii values based on current length, last used value, etc. Eventually (in the year 5050) we find a hash that does match, but isn't necessarily the original password. Even if it isn't the original it will work in the password field as the created value gets turned into the same md5 value.
Salting basically kills this off. This is because the original password is turned into an md5 hash and the both a random salt and the resulting hash are then hased again. So first a hacker would have to figure out what is and isn't the salt, apply the extracted md5 into the the cracker again and hope they chose right. However, since the salt values are exactly the same characters used to create the md5 hash there is no way to diferenciate between the salt and the original md5. Furthermore, as I said above, since there is no way to know if the "matching" hash is exactly the original value it's near infinatly impossible to actually figure out the values within both md5 hashes.
Hope that made long-winded sense

In short, md5's only weakness is that it isn't infinately random and that every hash could never be perfectly unique. However, I think that flaw was fixed I do believe that it would show even more statistical comparabilities than it does now. I think this is heavily outweight by the fact that it is indeed not an encryption, and as such cannot be perfectly "unencrypted". Nothing is perfect, but I think md5 can rival (atleast) a binary compiled ascii script (which is virtually impossible to reverse as well) if not perform even better.