The first argument of New Column() must be a string. Try this "Machine"||char(i)||"RunDuration" instead.
If I was to interpret your formula the way JMP would, it be something like "take the value for the current row in the column "Machine" and append the current value of the index and append the value of the variable StopTime... etc. You can't construct a column reference that way. In this case, you are going to need parse the formula before you apply it to get rid of the "char(i)" stuff because that is going to break as soon as the value of "i" is no longer what was when the formula was created, or is undefined. Here's how to do that:
For(i = 1, i <= 5, i++,
Eval(Parse(Eval Insert("\[dtMachineStartandStopTimes << New Column("Machine^i^RunDuration", Formula(:Machine^i^StopTime - :Machine^i^StartTime)) ]\")));
);
-- Cameron Willden