Alf,  болие чем правильно, ну очень надо, не может быть чтоб выхода небыло. 

 Ну если уж очень надо, то держи решение  
 
 Секрет кроется в двух свойствах объекта 
TextBox: 
SelectionStart и 
SelectionLength. Они совместно задают фрагмент текста, который выделяется (точно так же, как можно выделить мышью, например). Если 
SelectionStart указывает на конец текста, а 
SelectionLength=0, то получается тот самый эффект, который тебе нужен.
Во-первых, добавляешь в свою форму код что-то вроде:
private void TxtChange(object sender, System.EventArgs e)
{
  textBox1.SelectionStart = textBox1.Text.Length;
  textBox1.SelectionLength = 0;
}
Этот обработчик события заставляет текущую позицию переместиться в конец строки 
textBox1.
Во-вторых, прицепляешь его к событию 
TextChanged, которое возникает при изменении текста 
textBox1. В текст метода 
InitializeComponent добавляешь строчку:
this.textBox1.TextChanged += new System.EventHandler(this.TxtChange);
, которая связывает обработчик с событием.
Все! Теперь при 
любом изменении текста, неважно, вручную или программно, он будет прокручиваться влево ровно настолько, сколько нужно.
Постарайся проверить побыстрее, пока я на работе. Если вдруг не получится (хотя вряд ли), пришлю тестовый проект, на котором испытал идею.
Как говорит Фоменко, "даже если вас съели, у вас есть целых два выхода".  
