Since version 0.10.x, block headers are acquired separately, and therefore download is not delayed until previous blocks have been verified.
Previous questions about synchronization mention that the verification takes the most time: How does Bitcoin Core verify each block? I assume it checks each transaction's script, the merkle tree, and finally the blockhash, but how does that go in detail?