¿Cómo implemento salt en mi inicio de sesión para contraseñas?

Quiero implementar una sal en mi sistema de inicio de sesión, pero estoy un poco confundido sobre cómo se supone que funciona. No puedo entender la lógica detrás de esto. Entiendo que md5 es un algoritmo unidireccional y todas las funciones que he encontrado parecen mezclar todo junto. Si este es el caso, ¿cómo se recupera la contraseña para compararla? Mi pregunta más importante es, ¿cómo es más seguro usar la contraseña de un usuario que simplemente descifrar la contraseña? Si alguna vez se comprometiera una base de datos, el hash junto con la sal está en la base de datos. ¿No es esto todo lo que un hacker necesitaría?

También encontré otra publicación aquí en SO donde otro desarrollador dijo:

"Asegúrese de que su sal y algoritmo estén almacenadospor separado de la base de datos"

Me gustaría almacenar la sal en la base de datos. ¿Es esto realmente un problema si lo hago?

Estoy buscando ayuda para entender cómo funciona esto y también cuál podría ser la mejor práctica. Cualquier ayuda es muy apreciada.

EDITAR: Quiero agradecer a todos por sus respuestas e ideas. Aunque ahora estoy más confundido, sin duda ha sido una experiencia de aprendizaje para mí. Gracias de nuevo chicos.