Ce qui se passe ici, c'est que MySQL fait ORDER BY en construisant une table temporaire à partir de la jointure des deux tables. La table temporaire est trop volumineuse pour tenir en mémoire, MySQL crée donc un fichier temporaire.
Il y a quelques choses qui empêcheraient cela de fonctionner correctement. L'espace disque brut en est un. ulimit en est une autre. S'il est hébergé, ils peuvent avoir un quota sur votre utilisation du disque (en plus de ulimit).
Je suggérerais d'ajouter une clause limitative à votre requête. Actuellement, vous chargez l'intégralité des rss_posts et rss_feeds dans la table temporaire pour le tri. Si vous ne voulez que les 10 dernières, c'est beaucoup plus de données que vous n'en avez vraiment besoin.
SELECT posts.id, posts.post_title
FROM rss_posts AS posts INNER JOIN rss_feeds AS feeds ON posts.blog_id=feeds.id
WHERE feeds.blog_language=1
AND posts.post_data_db > (now - interval 30 day);
ORDER BY posts.post_date_db DESC LIMIT 10;