Alberto,
Cita: 1.º He configurado Notepad++ para que por defecto guarde las páginas PHP como UTF-8, aunque aún no entiendo lo del BOM.
Está bien lo de Notepad++, aunque hay otros editores gratuitos, algunos con muchas otras posibilidades, pero Notepad++ está bien.
Sobre el BOM, mira este enlace de wikipedia:
http://es.wikipedia.org/wiki/Byte_Order_Mark
Pero lo que a ti te interesa saber es que si usas sesiones, lo primero que debe salir son los header, y si tienes alguna salida anterior (el BOM lo es; es lo primero, aunque sea invisible), te impedirá seguir con la sesión. De modo que lo guardas con otra codificación y lo muestras como utf8, o lo guardas como utf8 sin BOM, y ya no pone esa molesta marca para las sesiones. Pero si no utilizas sesiones, olvídate de todo esto que te digo.
Cita: 2.º La función con SET NAMES aún me devuelve cajas vacías aunque sí realiza las consultas.
con set names sólo indicas al servidor la codificación que le envías y cómo quieres que te la devuelva. En realidad es un dos por uno. El problema no es mysql_query("SET NAMES 'utf8'"); si lo utilizas en su lugar y bien, le dices al servidor que le envías la información en codificación utf8 y debe devolvértelo en ella. Puesto que la información la tendrías en una base codificada en utf8, ahora los problemas se podrían producir al mostrarla en el html (archivos html y php) o si pasas algo por la URL (los navegadores usan utf8 por defecto, según tengo entendido). Sea con los header o con los meta podrás verlo todo en utf8, pero, ojo, si la información se incluyó con codificación iso-8859-1 o latin1 en su momento y luego has cambiado a utf8 la codificación de la base, seguro que tienes problemas.