Quindi, in pratica il tuo problema può essere formulato come:
The first product of two adjacent products of type 3 cannot be placed
in a position which is a multiple of 5.
Ciò che complica le cose è che non c'è ordine nella tua tavola e senza un ordine è impossibile definire una "posizione" costante per i tuoi prodotti. L'ordine delle righe restituite per un SELECT senza ORDER BY non è specificato.
Ad ogni modo, il modo più semplice per farlo è nell'applicazione. Prendi i risultati come un array, scansionalo e, se trovi due prodotti che non sono nella posizione corretta, mescolali semplicemente nell'array.