Is it possible to perform skip N rows and fetch M rows without full scan
The standard approach to get rows N through M is to do something like

SELECT *
  FROM (SELECT a.*, rownum rnum
          FROM (SELECT emp_id, last_name
                  FROM employees
                 WHERE positionID in (1,3)
                 ORDER BY &lt;&lt;something&gt;&gt;) a
         WHERE rownum &lt;= 60) b
 WHERE rnum &gt; 50


Note that you need to include the order by in the query in order for it to make sense.  Oracle may use a table scan (depending on whether or not positionID and/or the column(s) in the order by are indexed) but there will be a stopkey limiter so Oracle knows it can stop scanning the table (or the index) once 60 rows have been read.

In 12.1 and later, you can simplify this a bit

SELECT emp_id, last_nae
  FROM employees
 WHERE positionID in (1,3)
 ORDER BY val
OFFSET 50 ROWS
 FETCH NEXT 10 ROWS ONLY


More examples of using the new row limit clauses in 12.1