Is there a Civicrm hook for new contact/user insert?
Check out this post, which uses CiviCRM Entity and Rules to create Drupal users when Civi contacts are created.

Within the CiviCRM Entity module, check out the function civicrm_entity_action_create_user() to see how the username is set. You could patch it to implement a way to choose a username field/pattern, rather than hard-coding it to the Civi Display Name field.