Eu fiz algo semelhante tratando listas de IDs separadas por vírgulas para emular máscaras de bits. O truque é fazer uma junção usando como '%,id,% (onde id é a chave em uma tabela indexada por id). Para o seu caso, eu junto table_1 a uma tabela de inteiros sequenciados e o resultado inclui uma linha para cada id em sua coluna product_id.
Eu faço isso uma vez para cada id que você está solicitando e junto as tabelas derivadas resultantes para encontrar as comuns.
Aqui está a consulta:
SELECT p1.id, p1.name name1,p2.name name2, GROUP_CONCAT(p1.N) similarities
FROM (
SELECT *
FROM table_1 t1
JOIN sequence8 s8 on CONCAT(',',t1.product_ids,',') LIKE CONCAT('%,',s8.N,',%')
WHERE t1.id =1
) p1
JOIN
(
SELECT *
FROM table_1 t1
JOIN sequence8 s8 ON CONCAT(',',t1.product_ids,',') LIKE CONCAT('%,',s8.N,',%')
WHERE t1.id =4
) p2 ON p2.n = p1.n
GROUP BY p1.id