The three most obvious speedups you can attempt are to look for exact matches instead of using a regex to see if the number is in your list; to return immediately you find a match instead of continuing to plough through the rest of the list (this will halve your average lookup time, assuming calls are evenly distributed across the numbers); and to put the list into a hash - using the numbers as keys, the actual values don't matter - and use the
exists() function to look your prospective victim up.
If you know that your data mostly consists of long runs of consecutive numbers instead of occasional numbers scattered at random through the number space, then you'll get better results by changing the algorithm to look at number prefixes like I do in Number::Phone::UK. The scripts I use for creating the database that uses are in the tarball on the CPAN.