Link Contact Type with Drupal Roles
Can you create a smart group for each contact type and then use CiviGroup Roles Sync? 

Also if you add contact sub type field on the user registration profile and so that you can update the contact type and role on same screen.

HTH

Pradeep