What you're describing is a classic need to cache the results of queries. If your code is modular, the component that retrieves the article list should be written as
do I have this cached?
if so, serve it
else
retrieve it, cache it, and serve it
See the manual entry for set_file_buffer().
Note that when you begin to cache items, you are in essence creating multiple databases and introducing coherency issues. There are various strategies for dealing with this.
One is to cache for a finite amount of time, which makes the pseudocode like so
do I have this cached?
if so, is it newer than x minutes?
if so serve it
else
retrieve it, cache it, and serve it
Another is to flush the cache any time a record is inserted into the database.
One last issue. Are you certain that the database access is the bottleneck here? It may not be. If you are displaying the article list in a heavily formatted table (as you commonly see on Phorum systems, including this one) you may be observing the interaction of tables and the Web browser. If you're sending 90% formatting and 10% content, and the browser is spending its time calculating table dimensions (particularly a problem with Netscape), that may be the culprit, and not MySQL.