My answer assumes that you are describing a simple query like this:
SELECT `Number` FROM `Table` WHERE `Number` <= 12040670 ORDER BY `Number` DESC
From your question, it's not clear how you're storing the numbers. If the column isn't an integer data type, you should make one (probably
INT UNSIGNED). That will help the performance whether the column is indexed or not.
There probably should be an index on the numbers column; it will significantly increase the speed of the query. If the numbers column is the
PRIMARY key, then it's already indexed.
The overhead of integer comparison isn't really relevant here; if the numbers are
INTs, the comparison is very simple and efficient and if they aren't, the data types of the data and test value would be cast to the same type, which doesn't cost much at all. The real concern would be having to read the entire table if there isn't an index available.
1,000,000 rows is nothing to MySQL. If this query uses an index, there will be practically no load from it. If there is no index and it has to read the entire table, there may be some load and the server may need to hit the disk if the table isn't all in memory, but this query is simple and it probably wouldn't cause significant load. It may take up to a second to complete, but unless you would be running the query with a different reference number frequently, you probably wouldn't notice the query.