That is what I would do, though I would give it a meaningful name. All information in a message is temporary. You said at the start that this is inefficient and complex. There is little impact on efficiency as usually a message is passed along the flow by reference, nothing is actually moved about, it does not keep creating recreating messages. The message stays where it is and a pointer to it is passed along. It should not be complex if you structure msg.tempData in a meaningful way.
An alternative which may be appropriate is to send the extra data off on another wire bypassing all the nodes between and use a Join node in Key/Value pairs mode or Merge mode to join it back in when you need it.