A simple explanation as to why MD5 can't be 'decoded' is that there are only 2^128 (correct me if I'm wrong) possible outputs, and more than 2^128 possible inputs. This means that some pairs of inputs will give the same output. If you are given the output, there is no way you can tell what the input was. (of course you won't need to do such if a script only checks for a matching MD5 hash!)
You can however crack an MD5 hash by brute force (a dictionary attack is just a more selective brute force!) However, this is infeasible given the input was a string of length 12 with mixed-case letters, numbers, and special characters! At three million checks a second, this could still take over five million years! (actually that's if it happens to be one of the last strings you check, so lets put it at 2 million). This is the main reason why most websites ask for long passwords, which aren't actually secure if you can get social engineered, but I think I'm getting a bit off-topic here.
TL/DR: MD5 cannot be decoded, but can be cracked.

