Si, si complica un po' il codice ma e' possibilissimo.
Basta che nella funzione che fa il controllo tu proceda in questo modo.
Se per ogni gruppo ti basta una solo checkbox, basta che usi un op' di OR e il gioco e' fatto.
Esempio:

check1gruppo1
check2gruppo1
check3gruppo1

check1gruppo2
check2gruppo2
check3gruppo2

var arrGruppo1 = new Array(false, false, false);
var arrGruppo2 = new Array(false, false, false);


allora la funzione contr() viene cambiata in questo modo

if( ((arrGruppo1[0]==true)||(arrGruppo1[1]==true)||(arrGruppo1[2]==true)) && ((arrGruppo2[0]==true)||(arrGruppo2[1]==true)||(arrGruppo2[2]==true)) )

e poi il codice per ativare il pulsante.
Praticamente l'if e' suddiviso in questo modo:

if
(uno qualsiasi del primo gruppo selezionato)
e
(uno qualsiasi del secondo gruppo selezionato)
attiva il bottone

Visto che hai detto che non hai troppa pratica con il codice, le due barre || sono l'OR, ovvero nel test richiedono che almeno una delle varie condizioni deve essere vera.

Per il fatto del PHP non saprei come gestirla, dato che ancora manca al mio curriculum ma intendo rimediare al piu' presto...