I also suffer from this problem which lies in the buffer of the status table by CRM_ORDER_READ. Every time a status is requested, it is looked up in a buffer table, if it is not found, the status is read from the database, appended to the buffer table and the table is sorted to speed up looking up the status next time.
As you read different Items all the time, the buffer lookup never hits, but wastes lots of time sorting the buffer table. If you read 300.000 Items the status buffer is sorted 300.000 times with 1 to 300.000 elements.
It would be a great relief if htis buffer could be circumvented or prefilled and sorted once to overcome the great decrease in speed as the buffer slowly grows and all hte time is use for sorting a buffer that is never hit.