Насколько это эффективно?
bcrypt в помощь.
// EDIT
Крайне неэффективно.
// EDIT2
Генерация случайной строки (вместо вашей функции salt, длину отрегулируйте):
bin2hex(openssl_random_pseudo_bytes(21));
Я не криптолог, но помоему это бешеный overhead. Лучше алгоритм засолки похитрее сделайте.