I'm not sure exactly what you mean, but what you're trying to do, I'm fairly certain, is achievable.
The example above (X[myTag].POS and Y[myOtherTag].POS) would apply if X and Y were an array of CONTROL elements. But you say that X and Y are INTEGERS.
General rule of thumb: indirect addresses go inside square brackets. Other than that, the syntax is the same. So, if X and Y were integer ARRAYS (i.e. if the data type of X was INT[10], so you have ten 16-bit integers from X[0] through X[9], you could enter X[mytag] and if the value of "mytag" is 5, the instruction will execute using X[5].
If you're looking to address one of the individual bits within a single integer, same rule of thumb - just add the square brackets. If you were to address the fourth bit in a hard-coded example, you'd enter "X.4", so to make it based on the value of "mytag" it becomes "X.[mytag]".
Two cautions here. In the first example, if "mytag" has a value higher than 9 or lower than 0, your PLC will fault, as it will try to address an array element that does not exist. Likewise with the bit addressing - if you're using a 16-bit integer, you need to ensure that "mytag" is only ever in the range of 0-15, or again, PLC crash. It's important to note that this applies whether or not you actually "use" the logic. For example, if you were to put a LESS THAN instruction at the start of your indirect addressing rung to ensure that "mytag" was 15 or less, and only execute the indirect addressing if it is - your PLC will still crash if the value of "mytag" is above 15. Even if the rung is false, the indirect address is still assessed, and will still cause the PLC to crash (ask me how I know this). You must check that the value is within range and force it to be within range if it's not before you get to the rung with the indirect addressing.
The second caution is to do with using this method to turn bits on. If you use an OTE with X.[mytag], and the value of "mytag" is 4, then that OTE will turn on X.4. No problems there. If the OTE then goes false, it will turn X.4 off. Still no problems. But what if the OTE turns X.4 on, and then the value of "mytag" changes to 5? X.4 is now not addressed anywhere in the code, and so it will stay in the last commanded state. If that state is on, your output will stay on until something else acts on it to turn it off. There are a few ways around this, but it depends on your application. One way, if your goal is to only have one bit in the integer on at any given time, is to move zero to the integer immediately before you set the bit with the indirect OTE. That way you'll turn all your bits off unless the OTE is specifically acting to turn them on.
Hope that helps!