ho cercato di capire quello che hai tentato di fare ma il ragionamento è contortissimo, per non parlare delle innumerevoli e inutili stringhe utilizzate.
io farei cosi':
dichiarerei una stringa nome = "portare" (e l'hai fatto).
dichiarerei una stringa "outer" fatta di tanti spazi quanti sono i caratteri di "nome".
tramite un ciclo (for o foreach) andrei a vedere se la lettera è in "portare", se si mettila in "outer" allo stesso indice.
se ad esempio l'utente mette la lettera O, scorri tutte le lettere in "portare" e appena incontri la o la metti nell'indice corrispondente della stringa "outer".alla fine di ogni inserimento stampi "outer".è semplicissimo, tutta quella pappardella che hai scritto tu nn ha alcun senso...(sempre se ho capito quello che cerchi di fare)
codice:
string nome = "portare";             
string value = "";             
string outer = "_______";              

Console.WriteLine("Da ora hai 5 tentativi");            
for (int i = 0; i < 5; i++)             
{             
     value = Convert.ToString(Console.ReadLine());              
     for (int j = 0; j < nome.Length; j++)             
     {                 
          if (nome[j].ToString() == value)  outer = outer.Substring(0, j) + value + outer.Substring(j+1);                              
     }              
Console.WriteLine("risultato " + outer);             
}