as far as un-md5 hashing, the technical answer is yes, some crazy amazing professor over the summer wrote some high level paper in how it is possible to take the result of an md5 hash and get the original string (though I don't recall many of the details, I believe I saw it on slashdot), but I would have to imagine the process isn't exactly easy. PHP has a number of encryption functions built in, so you could always peek into them and see which one fits you.
btw, i believe that I heard that there is some kind of md6 hash in the works, but that's probably just some rumor I heard around the same time as I saw that article.
all in all, I'd say that md5 hash is going to be your safest way, along with the method proposed above with multiple user levels and restrictions.
granted there are articles on dangers of using md5 hash, but something that needs to be acknowledged is that there is no perfect security (at least not in my opinion), and that the best that can be done is to take as many steps as possible (and as reasonable for the information being protected) to protect the data.