Thank you @mr_moon and @cybereality for your fantastic comments.
I think the best way is to animate visible_characters
property, since the characters will be animated at a constant speed, no matter how many characters the text has.
However, even this method gives me performance issues. The problem is in my scene setup, I can make it run smoothly again by hiding the sprites I use for the dialogues. I find it strange that I only have around 10 sprites visible and it still tanks my performance.
I am developing on an older machine, an early 2013 MacBook, which is great for finding performance bottlenecks early. But I would not expect this to be a problem even on an old machine.
I would love to find the root cause for this. Maybe I should open a new thread. ?