I think you could use hook_webform_submission_presave
But hook_civicrm_pre might be better
It's a slightly different question but you should be able to use the same technique as described here, i.e. use the api in your message template to look up the info:
It looks like line 669 here:
You can try changing the 12 to something else. It might work to replace it with Civi::settings()->get('search_autocomplete_count') and then it should use the value under Administer -> Customize Data and Screens -> Search ...
CiviCRM Entity is the way to go if you want content creators to reference create CiviCRM data on nodes or other Drupal entity types...The downside is, assembly on some not so well documented features required. We have used it to allow users to add/edit contacts with emails etc..well as you know, I wrote that article.
There is this article too which tries to ...
CiviGrant is designed to support applications for scholarships.
It supports the eligibility test part of an internship process. Possibly the value of the grant is zero which is the second role of CiviGrant and which you may not need. If CiviGrant is overkill for your purpose then stick to webform.