SHA256 of the million most common passwords (with a 128 bit salt) takes 2 seconds /total/ on my laptop. That's only 42 days required to crack a database of one million hashes.
var stopwatch = Stopwatch.StartNew();
var salt = "0123456789012345";
int crackCount = 0;
foreach (var password in File.ReadLines(@"c:\temp\10_million_password_list_top_1000000.txt"))
{
System.Security.Cryptography.SHA256.Create().ComputeHash(Encoding.UTF8.GetBytes(password + salt));
++crackCount;
}
stopwatch.Elapsed.Dump();
crackCount.Dump();
=> 00:00:02.0981333
999999
Salt is indeed important, but the only real way to protect is to iterate - PBKDF2/scrypt/bcrypt.