Можно попробовать так: для каждого "похожего" товара прописать json-словарь, содержащий в качестве ключа id товара, на который он похож, а в качестве значения - позицию в "похожих" соответствующего товара.
Тогда для получения похожих на продукт с id=1 будет что-то вроде
SELECT id, related_pos.1 AS position WHERE position != 0 ORDER BY position
по-сути объем хранимых в JSON данных увеличивается вдвое: раньше хранили список id похожих, а теперь еще и позицию каждого похожего.