Mysql performance on varchar with ranges
Assumptions:


the query can only return 1 row (or none) and never 2 or more, i.e. the (number_start, number_end) ranges are not overlapping for the same numbertype_id.
the number_start and number_end values  are all left-padded with 0s to the same length.


Under the above assumptions, we can use a trick to use an index to fetch exactly 1 row (if there is one) that matches the criteria (not all, checking only the low end of the range) - and don't search for more rows. The check on the high end is done before the row is returned to avoid any false positive result:

SELECT n.* 
FROM 
    ( SELECT id, number_end
      FROM numberdata 
      WHERE numbertype_id = 7 
        AND number_start &lt;= '00112233'
      ORDER BY number_start DESC
      LIMIT 1
    ) AS ni
  JOIN
    numberdata AS n
  ON  ni.number_end &gt;= '00112233'
  AND ni.id = n.id ;


The query will only need an index on (numbertype_id, number_start) - or keep the one you have on (numbertype_id, number_start, number_end).