What is the best way to use CiviCRM for on-site registration at an event?
Yes, a Drupal-Civi webform will allow you to do just what you've described.

Note that if your event uses a price set, you will have to get creative (see below).  

From Webform CiviCRM Integration:


  Event registration via webform is extremely flexible; any number of
  contacts can be registered for any number of events on a single form.
  If your form has multiple contacts on it, you may choose to register
  them each separately for different events, or all together for the
  same event(s). If you choose to register them together, CiviCRM will
  show contact 1 as having registered the others...
  
  With payment integration, events can be paid for online or offline via
  webforms (see notes below on supported payment processors). Note that
  CiviCRM pricesets are not supported and fees should instead be
  allocated using the "event fee" field provided by this module.


If you have your staff/volunteers using the webform on behalf of registrants, you can also have exposed Existing Contact fields to look up whether registrants are already in the system or not, all on the same screen.