Currently queries with conditions like (RDB$DB_KEY = :param) use a very fast lookup of single record based on its number decoded from DBKEY. But if some range condition is used (e.g. RDB$DB_KEY > :param), then a full table scan is performed. However, if the lower/upper limits for the retrieval are provided, then a "partial" table scan could be performed instead.
The logical record number space is sequential and the full table scan just iterates starting with the zero number until the last record is seen. It can be modified to start with the given "lowest" record number and stop as soon as the last fetched record number is bigger than the given "upper" record number.