Você tem um índice na expressão que produz o título? Melhor ainda, um em (user_id, title_expression).
Se não, isso pode ser uma coisa excelente para adicionar, de modo a aninhar as primeiras 25 linhas de uma varredura de índice, visto que o Postgres não pode razoavelmente adivinhar quais 25 linhas aleatórias (daí a varredura seq que você está recebendo no momento tabela unida) será necessário.