Un
for se ejecuta siempre, porque en los parametros se especifica su valor de recorrido, desde el inicio hasta su final.
Un
while se ejecuta siempre y cuando se cumpla una condición.
Por otro lado, yo lo haría así:
int i;
for(i=1; i<= 100; i++)
{
if((i % 3 == 0) && (i % 5 == 0)){
Console.WriteLine("Número [" + i.ToString() + "] - M35");
}else if(i % 3 == 0){
Console.WriteLine("Número [" + i.ToString() + "] - M3");
}else if(i % 5 == 0){
Console.WriteLine("Número [" + i.ToString() + "] - M5");
}
}