You don't really need to increase every army's morale every day...
Instead, only raise the visual morale bar of VISIBLE armies(on your screen) to its correct projected value. I guess the game only renders on-screen units anyway, just let the morale bar visual update for those few units ONLY.
The AI could likewise when deciding targets etc apply that fractional morale gain internally in its calculations, without actually updating morale of any of the targets it is considering.
Whenever two hostile armies meet, immediately update the fractional morale of the units before anything else, so that they match the strictly visual bar presented on the screen.
Done. This will in no way be a performance hit. Can't say for sure though, but it seems slick enough.
It is still too easy to chain battles against a large stack until they run out of morale... Even with this fix.
Divide your army into three groups, so that each can fill the battle width.
Let the enemy attack, then once the first army can escape, let the second army join and leave with the first army. When the second army can escape, join with the third and leave with the second. Then rotate in the first army etc etc, which has by then gained some morale.
Taking turns like this without losing most of their morale will allow armies to withdraw to an adjacent province, and the fight is kept going with defensive terrain against the enemy attackers.
The enemy will be locked in battle, and unable to regain morale.
Once the enemy has no morale and like one regiment still fighting, leave combat with all groups, then attack again with a resting group to stackwipe them.
The AI needs to get smarter about dogpiling into a battle that already has a full battle width.
They need to learn to have reserves standing around to reinforce.
PI made this tactic viable by allowing morale damage on units sitting in the back row waiting to join combat. If half of an AI's units cannot do damage but still take full morale damage, then you can easily beat an army twice your size. By rotating armies in this manner i present you can beat an army even larger since you can let your armies take pauses for extra manpower, morale and merging throughout battle.
I see that the back-row morale damage was implemented in order for artillery to be more useful. You could use the same artillery units in a large battle without them ever losing morale back in the day. Then once the infantry in front routed, artillery had a chance of joining combat in the front row, which was also not ideal. So back row morale loss was devised to rout artillery at the same time as the infantry they protected.
I suggest therefore that only back-row artillery should take morale damage. Back-row cavalry or infantry should NOT take morale damage. Accidentally putting more cav/inf in than the combat width allows is a pure loss since they cannot fight and still rout at the same time as the regiment in front. The recruitment and upkeep cost of those units will have been completely in vain for every purpose!
And the AI does this ALL THE TIME.
I guess it would be cool also to allow manpower replenishment and morale gain of inf/cav units in the second row, or even of units that have not yet joined any of the two rows yet, as they are truly standing by as reserves rather than in the next province.