Entiendo que con el 'al menos' quieres decir que pueden aparecer otros nombres de actividad, pero que deben estar siempre esos dos.
Código sql:
Ver originalSELECT e.nombre FROM empresas_actividades ae
INNER JOIN empresas e
ON ae.empresa_id = e.id
INNER JOIN actividades a ON ae.actividad_id = a.id
WHERE a.nombre IN ('A', 'B') GROUP BY e.empresa_id
HAVING COUNT(DISTINCT(a.nombre)) >=2
No lo he probado. Comprueba los nombres de los campos y alias que he puesto.