Create new contact sub-type when extension is installed
A contact subtype is an "entity" - it exists as a record in the civicrm_contact_type table. So that means you can use the "managed entity" approach described here:

https://civicrm.org/blog/totten/api-and-art-installation

and documented here:

https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_managed/

You could instead implement the install hook (https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_install/) and manually test for the existence of the contact type and create it if not (more details in Demerit's answer below).