Ho scritto campo % 5 perchè il modulo restituirà 1 per 1,6,11,16 e così via. Se vuoi bloccarlo a 16 basta che aggiunga tale clausola.
codice:
select * from tabella
where date_format(campo_data,"%Y-%m") = '2009-02'
and day(campo_data) % 5 = 1 and day(campo_data) <= 16
La domanda relativa alla insert non l'ho capita. 
edit. Se vuoi fermare la ricerca a 16 potresti anche scrivere la query così
codice:
select * from tabella
where date_format(campo_data,"%Y-%m") = '2009-02'
and day(campo_data) in (1,6,11,16)