Avez-vous un index sur l'expression qui donne le titre ? Mieux encore, un sur (user_id, title_expression).
Sinon, cela pourrait être une excellente chose à ajouter, afin de parcourir les 25 premières lignes d'un balayage d'index, car Postgres ne peut pas raisonnablement deviner quelles 25 lignes aléatoires (d'où le balayage seq que vous obtenez actuellement sur le table jointe) sera nécessaire.