Postgres as far as I know uses B-tree by default.
You can switch sort order I think for this as well, so "most recent" becomes more efficient.
Multi-column indexes also work, if you are just searching for first column postgres can still use multi-column index.
One common misstep is having a table with columns like (id, user, date), with an index on (user, id) and on (date, id), then issuing a query like "... WHERE user = 1 and date > ...". There is no optimal index for that query, so the optimizer will have to guess which one is better, or try to intersect them. In this example, it might use only the (user, id) index, and scan the date for all records with that user. A better index for this query would be (user, date, id).
I wouldn't be surprised if you hit some sort of similar strange bug.