Ну в общем решаемо, но надо твердо устанавливать форматы занесения, чтобы потом можно было сплитовать правильно.
=QUERY(ArrayFormula(SPLIT(
SORT(TRANSPOSE(
split(REPT(JOIN(",",TRANSPOSE(ID_1))&",",(COUNT(ID_1)*COUNTA(ID_2))/COUNTA(ID_1)),",")),1,TRUE)
&","&
TRANSPOSE(
split(REPT(JOIN("|",ARRAYFORMULA(QUERY(TRANSPOSE(table2&","),,2000000)))&"|",(COUNT(ID_1)*counta(ID_2))/COUNTA(ID_2)),"|"))
,",")),"select Col1,Col2 where Col1 > Col3 and Col1 < Col4 order by Col1")