Retrieving latest record using DISTINCT ON is slow
Why must it sort if I have an index on both carid and timestamp?
  Is there a better method to use here?


Because you don't have an index on both carid and timestamp!  You have an index on carid, and a different index on timestamp.  If you want the query to use both, you need an index on (carid, "timestamp") as ypercube mentioned.

Likewise, I'd try switching from the DISTINCT ORDER BY to a GROUP BY, and benchmarking each.

With every tuning question, try writing the query in a few different ways, and compare them against each other - how fast are they, and how much resources do they use?