Flashing can occur in-window or in-desktop. You control in-window flashing with the Freeze Window script step, as mentioned by @Torsten. Short of never creating or changing windows, you can not eliminate flashing in-desktop. The problem is more visible in Windows than Mac OS, especially if a maximized window is displayed.
Windows allows for only one maximized window to be visible. All others must be behind the maximized window. Creating a new window automatically de-maximizes the maximized window, creating a very visible change to the user.
Creating a new window is always visible to the user in Windows and Mac OS. A new window, even if off-world, becomes the new active window. The previously active window, if and when visible, changes state to indicate it's no longer the active window. You can not eliminate this change. You can only reduce its impact.
That was my reasoning behind my suggestion to create an off-world window once and only once and have all processing occur in that window. The user will see something twice, once when the window is created, once when it is closed. That is the best that can be done to perform processing in a separate window.
You mentioned that multiple windows are necessary to perform looping. That implies the loop changes the original found set in such a way that the original found set can't be restored were the duplication steps performed in the same window. Copying the found set's customer_orders IDs in a variable would be a good way of no longer requiring the found set. You could then add a super-loop to process each ID instead of relying on restoring the found set.
Of course, using PSOS becomes viable when you copy IDs to a variable. That will completely avoid flashing. It will even perform faster on large found sets and over WAN.
Hope this helps.