3, 4 and 5 are good, but I don't think you understand how password hash systems work.
1) MD5 is fine for passwords, when used in a salted iterated hashing system.
2) Passwords are salted with a set number of bits, that depends on the system you are using, not some number of characters. And the salt must be stored with the password, otherwise you don't know how to compare them. Unless you are talking about a having a secret that you append to all passwords before sending them through the salt and hash procedure.
Ideally, using a different salt for each password is good - but storing the salt in plaintext inside the database defeats the purpose (only means that attackers can't rely on pre generated hash databases).
At the bare minimum, they could've salted the passwords inside the source code and only stored the resulting hash to the database.
So that, password "12345" becomes "12345lkj3409ruflk30rjfsldk4lkljflkj234%%#$4324", which is then hashed and stored in plaintext.
This simple step would've prevented the entire MtGox issue that we've seen yesterday.