The point that others already have expressed is that despite being interested in a topic as performance improvement so low level (as in instruction-level instead of algorithmic level) you seem to lack some important knowledge to do so such as assembly - it does not require as much as it does to write assembly code but to understand it in order to be able to look at the code in the debugger and see that some comparisons are apples and bananas.
I did not even read through your code but simply placed a breakpoint into your IsIN function and noticed that it contained a function call to System.SetElem (that even was the first time I have ever seen that function being called so a TIL for me). Why was that the case? Because you are not using consts here but variables. Had you simply made consts for all those IDs the code would have almost as fast as the IsOR which does not suffer to extra function calls but from memory reads (not noticeable in the benchmark because its all in L1 cache already).
On my CPU InOR is still a little faster than IsIN which is due to the fact how the compiler builds the in - you can see that for yourself in the disassembly and then look at instruction timings, read up on macro-operation fusion and data dependency
For reference, this is the assembly for the two functions when using consts
Project1.dpr.40: Result := aID in [xControlsRec.ButtonID, xControlsRec.FormID, xControlsRec.ListBoxID, xControlsRec.TabControlID, xControlsRec.ComboBoxID];
004CEE7C 83E802 sub eax,$02
004CEE7F 7417 jz $004cee98
004CEE81 83E802 sub eax,$02
004CEE84 7412 jz $004cee98
004CEE86 83E802 sub eax,$02
004CEE89 740D jz $004cee98
004CEE8B 83E802 sub eax,$02
004CEE8E 7408 jz $004cee98
004CEE90 83E802 sub eax,$02
004CEE93 7403 jz $004cee98
004CEE95 33C0 xor eax,eax
004CEE97 C3 ret
004CEE98 B001 mov al,$01
Project1.dpr.41: end;
004CEE9A C3 ret
004CEE9B 90 nop
Project1.dpr.45: Result := (aID = xControlsRec.ButtonID) or (aID = xControlsRec.FormID) or (aID = xControlsRec.ListBoxID) or (aID = xControlsRec.TabControlID) or (aID = xControlsRec.ComboBoxID);
004CEE9C 83F802 cmp eax,$02
004CEE9F 7417 jz $004ceeb8
004CEEA1 83F804 cmp eax,$04
004CEEA4 7412 jz $004ceeb8
004CEEA6 83F806 cmp eax,$06
004CEEA9 740D jz $004ceeb8
004CEEAB 83F808 cmp eax,$08
004CEEAE 7408 jz $004ceeb8
004CEEB0 83F80A cmp eax,$0a
004CEEB3 7403 jz $004ceeb8
004CEEB5 33C0 xor eax,eax
004CEEB7 C3 ret
004CEEB8 B001 mov al,$01
Project1.dpr.46: end;
004CEEBA C3 ret
Depending on the number of IDs you have it might be worth using power of two and bitmasks or an enum directly because that would only require one cmp/test making the function twice as fast and perfect for inlining which would then also eliminate the function call overhead at all.