Gli algoritmi di hash sono intrinsecamente irreversibili, ma ovviamente non garantiscono con assoluta certezza l'assenza di collisioni (due parole diverse con stesso hash); e' altamente improbabile, ma puo' succedere.
Ora non ricordo esattamente i dettagli, ma ora md5 e' considerato "superato", sono stati trovati degli exploit per trovare collisioni, quindi il suo uso e' sconsigliato a favore di altri come sha1.
Per quanto riguarda le parole "famose" e' molto semplice: basta aggiungere alla parola un "salt", una stringa di tua scelta e fare l'hash di quello. Tu inserisci "password" ma ottieni l'hash di "password" piu' una stringa ignota, quindi non puoi paragonarlo al hash di "password" liscio.
Usare funzioni di crypting sposta solo il problema della sicurezza dalla "reversibilita'" dell'hash alla segretezza della chiave privata.