Matthias,
Just for a data point, I’m wondering what kind of machine you are testing on? Mainframe, LUW server or PC? How many other users/jobs are active? If Mainframe, is Natural optimizer involved? What Adabas caching is in use, indexes, table files? Do you only care about optimizing wall clock time, or does CPU time matter too?
I guess Steve Robinson is enjoying his retirement, haven’t seen him post in over a year. But he always recommended doing large table searches using EXAMINE #TABLE(*) for #STRING … GIVING POSITION. This requires redefining an (A1/10000), or whatever size, over the original array. And even uglier, needing to add an extra character between each array element and populate it with some unused character to avoid matching a value split between 2 occurrences. But I think he was only focusing on saving CPU time. I would only use this method if I was charged a lot for CPU minutes.
Here is a post from him w/example: https://tech.forums.softwareag.com/t/searching-and-updating-array/243555/4