There's no way to know for certain. Caches are designed to last as long as possible, but also to be evicted when they are invalidated (e.g. because a record changed) or when resources are required. There's also the added complexity of hardware and OS-level caches that also improve performance "randomly." These parameters are also tweaked on a fairly regular basis to optimize performance.
Salesforce.com does specifically recommend that you do not pre-warm the cache (I can't find a specific doc that states this, but I know I've heard it before). You should not try to take advantage of the cache specifically because it does get its performance altered from time to time, and optimizing a certain way today might cause a nightmare in the next patch or tweak.
Also, in regards to your specific case, the ORDER BY is on an indexed field, so you wouldn't gain any performance that way. One way you could help the database is, if you know what you're looking for, you could use SOSL instead to leverage the search index. Note that all indexes do not support a wildcard at the beginning, so you might also just want to make a separate field that splits the text in a way that allows the criteria to be met via indexes. Since it's a scheduled query, I presume you could probably make a custom field that contains the name shuffled around in a way that allows this optimization.
Indexes are better than cache, and more reliable. Figure out how to optimize the data within the indexes, and you'll have a solution for your timeout problem. SOSL requires that you know the first letter of the word you're searching, and SOQL requires that you know the first letter of the field in order to use indexes.
You can check if your query is optimized by using the Query tab in the Developer Console. Click on the Query Plan button after putting in your query, and you'll see what the database cost for your query is. You need to make sure its cost is low enough that the data can be found reliably without depending on the cache.