I can't reproduce this behaviour. Here, the timestamp column is first.
-Do you have a datashape assigned to your output Infotable variable? if not, try assigning TimestampOnly_DS to it. In Mashup, remove binding, save, reload service, rebind
-in your service, I suppose you add the fields to the infotable using AddField? you can pass an ordinal parameter to that which gives the order of the columns:
result.AddField({name:"f2", baseType:"STRING",ordinal:2});
result.AddField({name:"f3", baseType:"STRING",ordinal:1});
Use that, again, remove binding, save, reload service, rebind.
Note that the order of the columns is partially determined at bind time. When you bind to a grid the component tried to find out the columns not only by looking at the columns returned in the service declaration, it (tries to) run the service and checks the result.
Hence, whenever you change the "result style" of your service, try to remove the binding, save, reload service, rebind.