не знаю, будет ли это работать с MySQL, но вы можете попробовать что-то вроде:
Company.joins( <<-SQL_SCRIPT, 3 )
INNER JOIN (
SELECT "company_id", COUNT("*")
FROM "company_roles"
GROUP BY "company_id"
)
AS "filter"
ON "filter"."company_id" = "companies"."id"
AND "filter"."count" = ?
SQL_SCRIPT
.где company_roles
будет таблицей присоединения для ассоциации HABTM.