It depends on your query. If you are only querying for these two values, e.g.:
SELECT StartNum, EndNum
FROM Books
WHERE (@Num >= StartNum) AND (@Num <= EndNum)
In this case, SQL Server only has to seek through the two indexes to return the numbers. Your two indexes contain the value you're indexed, and because it's an index they're sorted.
But i'm sure you're actually including other columns in your query:
SELECT BookID, Title, IDBN, Author, StartNum, EndNum
FROM Books
WHERE (@Num >= StartNum) AND (@Num <= EndNum)
In this case, SQL Server, once it has found the id's of the rows that match the criteria, must then go back into the database and find those rows so that it can return you the:
in addition to the values it already has from the two indexes:
Note: An index on StartNum implicily contains the value of the clustered key, since that's how it knows what row corresponds to an entry in the index.
The problem is that if there are "too many books" that it has to go look up in the table, then it might just be faster to read the entire table top to bottom.
Analogy: You look in the index of a book for all references to "design patterns".
design patterns: 4, 89, 221, 442
If there's only 4 entries, then you'd be okay with flipping backwards to the page listed in the index. This is called a bookmark lookup.
But what if the index said there was 827 references to a phrase?
computer: 1, 2, 6, [snip 825 entries], 1087, 1128
Then it might just be faster to read through the book to find them yourself. In this case we give up and scan the entire book. SQL Server calls this a clustered index scan, if the table has a clustered index, or a table scan if there is no clustered index (i.e. it's a "heap table")
If you were simply referencing StartNum and EndNum in your query (let say you were getting a count), then i'm sure you'll see consistently low reads and execution times. But if you include other columns, and SQL Server thinks that there is too many rows that will be returned from that query (more than 5% of the table, for example), then it is just going to forget the index and scan the entire table.
There is a crossover point, where SQL Server knows the distribution of StartNum and EndNum values in your table, because it samples the values and has statistics on their distribution. If some values of @Num will happen to return few rows, and SQL Server knows this, it will perform the relativly few bookmark lookups. But if your data distribution would cause more rows to return, then you'll get the clustered index scan.