The mistake you did is writing it in for loop.
When you write it in a loop that means you are asking the compiler to run the whole logic inside the loop in a single frame.
Instead you can to use the update function in a different way. 
Just to start from scratch, update function run every frame. That means it makes sure that every logic written inside the body will be executed before the frame is drawn on the screen. Once the frame is drawn then update is called again, and the amount of time it took since the start of previous update function execution to current is saved in Time.deltaTime.
So in this code we are gonna use the deltaTime and update frame to create the effect you wanted.
To do this we gonna need a global variable to save the current length (index) of the string you wanted to display at a given particular frame.
private int retroAnimatedTextIndex = 0;
and also need another global variable to save the text you wanted to show
private string retroStyleAnimatedText = "";
Since I started typing a long reply, I thought I’ll show you a better OOPs way of doing this so that you can reuse this function 
So a function that takes string as parameter and can be reused as many time as you want.
Make the function public so that you can call it from other classes also.
// string to show the retro animated effect
public void ShowRetroAnimatedText( string pText ){
retroAnimatedTextIndex = 0;
retroStyleAnimatedText = pText;
// resetting the text inside TextMesh
myTxtMesh.text = "";
}
And now the magic happens in update function.
// a temparory variable to save the time elapsed between last letter that appeared
private float retroStyleAnimationDeltaTime = 0.0f;
// amount of delay between each letter to appear
private float const _RETRO_STYLE_DELAY_BETWEEN_LETTERS_ = 0.5f;
void Update () {
// checking to make sure that the index is less than the text length
if( retroAnimatedTextIndex < retroStyleAnimatedText.Length ){
// incrementing the delta time
retroStyleAnimationDeltaTime += Time.deltaTime;
// checking if the time elapsed between last letter apperance and now is greater than delay
// if it is greater then its time to show next letter
if( retroStyleAnimationDeltaTime >= _RETRO_STYLE_DELAY_BETWEEN_LETTERS_ ){
// resetting the delta time
retroStyleAnimationDeltaTime = 0.0f;
retroAnimatedTextIndex++;
// since myTxtMesh is a text mesh it can retain the text
// so applying the text once is enough
myTxtMesh.text = retroStyleAnimatedText.Substring(0, retroAnimatedTextIndex);
}
}
}
And using this is a piece of cake.
ShowRetroAnimatedText("Hello World");
You can change the amount of delay, play around with values until you are satisfied with the output. 
Hope this usage of update function helps you in your future coding.
Good luck. 