Да, конечно этот способ лучше.
То, что вы предлагаете называется динамической солью.
Если уж хочется чего-то «хитро-изварщенного», то можно хранить в базе что-то такое:
substr(md5(md5 (<динамическая соль> . $password) . <статическая соль>), 0, 16);
где динамическая соль будет вычисляться так, например:
substr($login, 0, 3) . ($password, 1, 5) . $login[4] .$password[0] . <статическая соль>