Right, so I managed to turn the inherent sequential execution of rules into a hierarhical one.
This is achieved by using one additional external variable which serves as the rule id to be next executed, and doubling the number of rules (these extra "execution flow control" rules are hidden from the user). This doubles my execution time, but is still acceptable when compared to using the IfElse Activity. Around 1000000 rows of data can be processed in under a minute.
Structure of a rule :
Rule_n is composed of 2 rules :
Rule_n_1's condition is : RuleIdToBeNextExecuted = n AND (User's rule)
Rule_n_1's Evaluation to True : RuleIdToBeNextExecuted = next action/rule if Rule_n is True
Rule_n_1's Evaluation to False : No action taken.
Rule_n_2's condition is : RuleIdToBeNextExecuted = n AND NOT(User's rule)
Rule_n_2's Evaluation to True : RuleIdToBeNextExecuted = next action/rule if Rule_n is False
Rule_n_2's Evaluation to False : No action taken.
Equivalent diagram to the one in the question :
This structure allows me to create a pipe&filter execution approach to the user's rules.
Research : My own data structure design.