Wenn Sie nur die Tag-Tabelle (nicht die Kategorie-Tabelle) haben würden, ist dies ein optimierterer Anfang:
SELECT article_id,count(*) AS q
FROM article_tags
WHERE id_tag IN (
SELECT id_tag
FROM article_tags
WHERE article_id=41
)
AND article_id!=41
GROUP BY article_id
ORDER BY q DESC