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
.