Prova così

codice:
(select * from tabella
where campo_data >= curdate()
order by campo_data asc)
union
(select * from tabella
where campo_data < curdate()
order by campo_data desc
limit 0,1000)
Al posto di 1000 metti un numero sufficientemente grande da contenere tutte le notizie vecchie.