MYSQL - order by indexed column
When building an INDEX, start with the '=' columns in WHERE.  Then move on to one range:

INDEX(published, publishedon_hourly)  -- or
INDEX(published, cat_id, publishedon_hourly)


In newer versions of MySQL, the second choice may do a leapfrog game (with the IN) to be more efficient than in older versions.  Give it a try.

My cookbook.

You could also give it this one

INDEX(published, views_point)


but that is risky -- It will be fast ood if 20 desired rows show up with high values of views_point, but it will be slow otherwise.  The Optimizer is not smart enough to always choose correctly between handing the ORDER BY versus handling the WHERE.

(As a side note... Did you want the extra noon?  BETWEEN..AND is inclusive.)