I think substrate-archive is the most reliable one when it comes to performance. It is connected directly to the RocksDB, therefore its processing time is way faster than other applications that rely on RPC calls.
Of course it has its own caveats, for example, substrate-archive doesn't store events or results from extrinsics, making it harder to determine if the extrinsics registered in the PostgresDB succeed or not.
Subsquid is also a good indexer but even though it says that it is built on top of substrate archive, it only takes the idea from it, and creates an indexer that is basically querying the node for each block that it is being processed. If you overload the substrate-node with transactions using, for example, sub-flood, the subsquid indexer tends to slow down and it can cause the indexing process to be way behind the latest state of the chain. The good thing about subsquid is that it stores only finalized data, so you don't have to deal with finalization or else.
I think the best solution could be a combination of substrate-archive and maybe another process running next to it to enrich the already indexed information, adding events and extrinsic execution results, for example.