and adding through the session ->with('arr1', $arr1)->with('arr2', $arr2)... doesn't seem very good to me, if there is large data, plus you need to convert arrays to strings and back.
Why doesn't it seem good to you? The data must be kept somewhere, and flashing it in session is certainly better than sending it to the client, sending it back to the server, validating it, then passing it to the view...
And why would you need to convert arrays to strings? Laravel handles serialization, so you don't need need to do anything. You can store arrays, objects, etc.
In short: use with(). It exists for this exact purpose. You don't need multiple with() calls: you can pass keys and values as an associative array:
redirect()->route('foo')->with([
'arr1' => $arr1,
'arr2' => $arr2,
]);