create index ix_forum_message_1 on forum_message (forum_id, dt_published)
и все стало хорошо (is_published выкинул из where, тут оно не особо надо)
похоже, что т.к. mysql дату хранит как число, он очень хорошо обошелся с запросом: SELECT MAX(dt_published) FROM forum_message WHERE forum_id = 1 когда есть индекс по dt_published и forum_id...