Сложный MySQL запрос?
С точки зрения производительности при больших объемах данных - самое правильное это для первого запроса держать отдельную табличку по типу Вашей, но добавлять туда данные только если дружба взаимная.
Обновлять её соответственно при добавлении-удалении дружбы.
Во-первых, вам не нужны айдишники в таблице дружбы (хотя у вас это таблица подписок, если правильнее выражаться).
Во-вторых, вам нужно использовать JOIN-- Подписки
select u.id, u.name 
from t_users me
left join t_users_friends uf on uf.user_id = me.id
left join t_users u on u.id = uf.friend_id
where me.id = 1;
-- Подписчики
select u.id, u.name 
from t_users me
left join t_users_friends uf on uf.friend_id = me.id
left join t_users u on u.id = uf.user_id 
where me.id = 1;
-- Взаимные подписки (друзья, тяжело)
select u.id, u.name
	from t_users me
	left join t_users_friends uf on uf.user_id = me.id
	left join t_users u on u.id = uf.friend_id
	where me.id = 1
	and u.id in (
		select u2.id
		from t_users u2
		inner join t_users_friends uf2 on uf2.user_id = u2.id
		where uf2.friend_id = me.id
	);
Дружба же - это перекрёстная подписка и она действительно может работать тяжело и вариантом оптимизации является предложенный выше Дмитрий Энтелис вариант.