A ideia do hash é provavelmente a melhor. Você pode ter colisões, mas elas seriam extremamente raras.
Torne o campo de hash uma chave exclusiva para a tabela e capture o código de erro duplicado. Ou use
insert ignore ou insert replace . insert ignore ou insert replace .