You can request any template via ajax using jQuery. jQuery would essentially listen for onChange events from the search field and ajax load a template that looped through the search results.
The template that you request can even be the default full search results page, with a conditional that determines which part of the template gets returned if the request is ajax.
{% set query = craft.request.getParam('q') %}
{% set entries = craft.entries.search(query).order('score') %}
{% if not craft.request.isAjax %}
{# Full page results content can go here #}
<h1>Search Results</h1>
<div class="search-results">
<ul>
{% for entry in entries %}
<li><a href="{{ entry.url }}">{{ entry.title }}</a></li>
{% endfor %}
</ul>
</div>
{% endif %}
{% if craft.request.isAjax %}
{# Drop-down results can go here. And inserted into DOM via jquery. #}
{% for entry in entries %}
<li><a href="{{ entry.url }}">{{ entry.title }}</a></li>
{% endfor %}
{% endif %}
jQuery can then insert the results of the ajax call using an html element selector. See the jquery documentation for more information on using .load or .ajax.
You will also probably want to put the {% set entries ... %}
inside the if isAjax
statements so that you can limit the results, or implement pagination, for the drop down vs the full page.