I think the decision depends on the trade-off between performance, simplicity, and maintainability.
One point that may be worth validating is the current Data Table limits. According to the latest Genesys Cloud documentation, a Data Table supports up to 10,000 rows by default, with up to 300 Data Tables per organization, and both limits can be increased by contacting Customer Care if needed.
https://help.genesys.cloud/articles/work-with-data-tables/
The documentation also recommends using Data Actions to query external systems when the required dataset exceeds the supported Data Table limits, retrieving only the specific record needed during the interaction.
Since your filtered dataset is around 20,000 records and is refreshed only once per day, I see two possible approaches:
Follow the documented recommendation and keep the source of truth in the external database, using a Data Action to retrieve only the required customer record.
If avoiding a Data Action for every interaction is a priority, partition the dataset across multiple Data Tables using a deterministic key (for example, based on the Customer ID), allowing the IVR to perform only a single lookup.
Out of curiosity, has anyone successfully requested an increase to the Data Table row limit beyond the default 10,000 rows? I'd be interested to hear about any performance or operational considerations after the increase.