CLP(FD) labeling on possibly infinite domains
Before discussing correctness, efficiency and alternative approaches, I first have three smaller suggestions to simplify the predicate a bit:


Its seems I2 is nowhere really needed, you can always simply use J instead.
for  J2, I would stick to CLP(FD) constraints like: J2 #= J*10.
instead of (\=)/2, I recommend to use dif/2.


These changes make the code a bit easier to read and more uniform, and put us into a better position to discuss the remaining issues.