Assunto interessante… também andei pesquisando, sem muito sucesso. Pensei na alternativa de implementar isto através de procedures e triggers. Resumindo seria necessário uma procedure que dado um valor (String) gerasse o equivalente fonético, e uma trigger para quando ocorresse a inclusão do registro ou atualização do campo esta procedure fosse acionada e o valor da chave fosse gravada num campo indíce auxiliar. Para fazer a pesquisa pelo SELECT poderia ser utilizada a mesma rotina de geração de chave para recuperar o valor do índice.
Cheguei a implementar um protótipo da rotina fonética mas não tive tempo de transformá-la em procedure e trigger.
Seria necessário um banco de dados que aceite procedures escritas em java, acho que o HSQLDB e JavaDB aceitam.
Se alguém tiver mais idéias podemos trocar experiências.
Teriamos que fazer algo semelhante mas usando os fonemas da língua portuguesa.
O parser que começei a desenvolver tratava o som dos fonemas agrupando os som parecidos, seria mais preciso do que o algoritmo do Knuth que gera chaves de até quatro dígitos.
Por Exemplo, esta é a saída de testes da rotina com algumas palavras: