Isso é dificíl de implementar mesmo. O recomendado é pegar pronto devido a complexidade.
No entanto, se quiser entender melhor como isso funciona, recomendo da uma olhada no algoritmo Breadth first search. É com ele que descobrimos o caminho mais provavél de A para B.
Eu tenho um projeto somente para estudos que demonstra como isso funciona de maneira realmente simples, mas o core da ideia esta presente: word-ladder
Não mais, esse tipo de coisa foge do escopo do teu projeto. Existem diversas soluções por ai.
faz sentido gerar automaticamente tags e aliases para cada produto
O que posso dizer é que, gerenciar tags e aliases no banco de dados não é brincadeira a menos que faça isso com rigor. Uma hora isso vai se expandir tanto e pode se tornar difícil de lidar, com tags redundantes e coisas do tipo. É difícil dizer se é esse é o melhor caminho por não conhecer o escopo do teu projeto com exatidão, mas no mínimo, recomendo testar em ambiete controlado antes de implementar, pois voltar atrás é muito difícil.
Existem outros algoritmos melhorem para o seu maior problema do que Breadth first search, mas é um bom começo para começar a entender o problema melhor.