1) create a table with ints from 0 to 31;
CREATE TABLE `ints` ( `i` int(11) NOT NULL default '0');
insert into `ints` values (0),(1),(2),(3),.....,(31);
2) create a view called 'month'
create view month as select i, date_add(CURRENT_DATE,INTERVAL (i-DAY(CURRENT_DATE)+1) DAY) d from ints having month(d)=month(current_date);
3) after this change your query to (untested... ;-):
SELECT day_of_week, AVG(order_count) average_order
FROM (
SELECT DAYNAME(STR_TO_DATE(order_time,'%m/%d/%Y %H:%i')) day_of_week, DAYOFWEEK(STR_TO_DATE(order_time,'%m/%d/%Y %H:%i')) day_num, TO_DAYS(STR_TO_DATE(order_time,'%m/%d/%Y %H:%i')) date, COUNT(*) as order_count
FROM data
RIGHT JOIN `month` on i=date(order_time)
GROUP BY date) temp
GROUP BY day_of_week
ORDER BY day_num