There's no way to do that without a query to the DB.
Not sure if this is really faster, but try to only query for the IDs and see how this performs for you. Another thing you could do, is to add your conditional directly to the for loop tag:
{% set entryIds = craft.entries.section('news').order('postDate asc').ids() %}
{# Get the position of this entry's ID within our IDs array #}
{% set position = '' %}
{% for key, value in entryIds if value == entry.id %}
{% set position = key + 1 %}
{% endfor %}
{# Get the amount of total entries #}
{% set total = entryIds|length %}
{{ entry.title }} (no. {{ position }} / {{ total }})
If you are not interested in the total number, here's another way to get the position. The syntax is simpler, though it does not perform better, as you still need to query for the entries:
{# Get this entry + all entries posted before it #}
{% set postDateParam = '<= ' ~ entry.postDate|date('c') %}
{% set entryIds = craft.entries.section('news').order('postDate asc').postDate(postDateParam).ids() %}
{# Count them #}
{% set position = entryIds|length %}
{{ entry.title }} (no. {{ position }})