Optimizing MySQL query with some LEFT OUTER JOINS
Please provide SHOW CREATE TABLE; it is important for optimization to know, for example, which table recycle_bin is in.

Even before looking at the joins, get rid of the "index merge intersect" by building a "composite" index:

 INDEX(sellfast, subcat_id, recycle_bin, hidden)  -- in any order


A LEFT OUTER JOIN (aka LEFT JOIN), per se, is not the villain.  Having a subquery in it may be the real villain.  Several things can be done with such, but I am not sure any cure applies to your case:


Get rid of LEFT.  But this would lose some rows if they are missing from ads_rating.  Without LEFT, the subquery would probably be performed first instead of repeatedly.  (If this is valid, try it first.)
Move the subquery into the SELECT.  But there are two columns being provided, so it is unlikely to be practical.
Use WITH.  But this requires version 8.0.  What version are you using?
CREATE TEMPORARY TABLE for the subquery, then use it in place of the subquery.  (This may be the best choice.)