This is one of the blog posts I found for interesting with respect to using both Batch Apex and Scheduled apex.
Database.executeBatch (part of apex batch) takes a parameter called scope which specifies the number of
records that should be passed into the execute method.
“Each execution of a batch Apex job is considered a discrete transaction. For example, a batch Apex job that contains 1,000
records and is executed without the optional scope parameter from Database.executeBatch is considered five transactions
of 200 records each. The Apex governor limits are reset for each transaction.”
Also, we can use Database.Stateful in the class definition to make the batch remember the static variables.
“If you specify Database.Stateful in the class definition, you can maintain state across these transactions. This is useful
for counting or summarizing records as they're processed. For example, suppose your job processed opportunity records. You
could define a method in execute to aggregate totals of the opportunity amounts as they were processed.”
I think by using them together, we can achieve what we need without hitting governor limits.