Every article about ORC says the same thing.

"Columnar storage, built-in indexes, predicate pushdown - so it's fast."

That's not an explanation. That's a slogan.

So I wrote a small ORC parser from scratch, generated 5 million rows, and opened the file with my hands.

The question I actually wanted answered: