non e' sbagliato l'approccio che fai. Solo che una clausola WHERE non puo' iniziare con AND. ed anche quel substr() farebbe pensare che l'AND prima era al fondo della stringa.
Particolari a parte, faccio pure io cosi' per opzioni multiple di cui non conosco a priori la quantita' impostata dall'utente.