In general, the optimizer always tries to avoid creating temporary tables to return query results, because the entire temporary table must be populated before the first row can be returned. If the optimizer uses an index, it avoids creating a temporary table. The optimizer only creates a temporary table as a last resort.
It is difficult to anticipate whether an index you have created avoids the necessity for a temporary table. Therefore, you should always check the plans for a query to ensure the indexes you have created are actually being used by the UltraLite query optimizer.