Então, basicamente, seu problema pode ser formulado como:
The first product of two adjacent products of type 3 cannot be placed
in a position which is a multiple of 5.
O que complica é que não há ordem na sua mesa, e sem ordem é impossível definir uma "posição" constante para seus produtos. A ordem das linhas retornadas para um SELECT sem ORDER BY não é especificada.
De qualquer forma, a maneira mais simples de fazer isso é no aplicativo. Pegue seus resultados como uma matriz, digitalize-os e, se encontrar dois produtos que não estão na posição correta, basta embaralhá-los na matriz.