Why does pay to pubkey hash contain OP_CHECKSIG at the end instead of beginning?
Couldn't we check the signature even before doing the hash?


We certainly could, but that would be silly. The hash is about 1000x faster than checking a signature. Doing the signature check when the hash fails would be a waste of time


  More precisely, couldn't it instead do:
  
  scriptPubKey: OP_CHECKSIGVERIFY OP_DUP OP_HASH160  OP_EQUAL


No, that certainly wouldn't work. The OP_CHECKSIGVERIFY would remove the public key from the stack, so there is nothing to compare it with. The OP_DUP would always fail, as there is nothing to duplicate anymore.