Непонятно, сколько user_id в среднем подходят под условие
user_id которых будет равен user_id или friend_id, в свою очередь user_id или friend_id должны соответствовать например '1'.
Мало знаю про оптимизитор в mysql, но не думаю, что он шибко умный, так что чем проще запрос, тем лучше. Попробуйте так как-нибудь:
SELECT id FROM posts
WHERE user_id IN (
SELECT '1'
UNION
SELECT user_id FROM friends WHERE friend_id = '1'
UNION
SELECT friend_id FROM friends WHERE user_id = '1'
)
ORDER BY id DESC LIMIT 0, 10
Ну и, конечно, индекс на posts.user_id должен быть.