Why there is no block index or block height included in the block header?
The chances of two blocks having the same hash are extraordinarily low. Having the same hash would essentially ensure that they must be the same block (two copies of the same block with the same transactions at the same height with the same ancestor).

While the blocks themselves do not contain the height, most full node software keeps track of the height of each block. In Bitcoin Core you can use getblockchaininfo to see how many blocks your node has or, getblockcount to see how many blocks your node knows about.