Acho que sua ideia de uma tabela de hash está um pouco [extinta]. As tabelas de hash dividem as chaves em listas semelhantes. Por exemplo:tabela de hash baseada na primeira letra do nome, então haveria 26 listas. Seu hash é a primeira letra do nome, o que torna a pesquisa mais rápida.
md5, sha1 são usados para derivar hashes que são usados para verificar se os dados não foram adulterados. eles geralmente vêm em versões de 128 bits ou 160 bits. Portanto, ele pega os dados X e os envia por meio de um hash para obter uma string alfanumérica de 128 bits que deve ser a mesma, não importa onde seja feita. Isso geralmente é uma coisa de segurança.
EDITAR: Expandindo a questão de como derivar chaves.
Você pode utilizar um módulo dos dados para criar uma chave a ser usada para a linha. Nos dados de exemplo % X onde X é o número total de chaves que você gostaria de ter. O problema com isso é que X é difícil de encontrar; se você tiver 20 itens, então transformar X em 20 é viável e torna a pesquisa rápida, pois cada item tem sua própria linha. Mas se você tem 1000 itens, então fazer % 1000 NÃO é viável. Fazer algo como X =75 funcionaria melhor para isso.