A sugestão de hash MD5 que você teve é muito boa - está documentada em High Performance MySQL 2nd Ed. Existem alguns truques para fazê-lo funcionar:
CREATE TABLE urls (id NOT NULL chave primária auto_increment,url varchar(255) não nulo,url_crc32 INT UNSIGNED não nulo,INDEX (url_crc32));
As consultas selecionadas devem ter esta aparência:
SELECT * FROM urls WHERE url='http://stackoverflow.com ' AND url_crc32=crc32('http://stackoverflow.com ');
O url_crc32 é projetado para trabalhar com o índice, incluindo url na cláusula WHERE é projetado para evitar colisões de hash.
Eu provavelmente recomendaria crc32 sobre md5. Haverá mais algumas colisões, mas você tem uma chance maior de ajustar todo o índice na memória.