Is there a way to know if a cleartext substring is present in a hash? Let's say I have 4 strings - A, B, C &amp; D. I concatenate and hash them in any order: A + B + C + D or A + C + B + D and send it to another party. Let's call this X.

I can also send a hash of A separately to the same party (but cannot send it in plain text). Is there any algorithm that I can use to figure out whether the string A is used while creating X?
Short answer: not really.  I think the closest thing you're going to find is a "cryptographic accumulator." I can accumulate the separate hashes of the strings A,B,C,D.  But even then, testing whether A is in the result requires more than just the accumulator itself - you also needs a piece of data called a "witness for A" - which is a separate number that "proves" that A is in the accumulator.

Merkle trees have the same problem - to prove that A is in the tree, you need more than just the final total of the tree.  You also need to know where A appeared in the tree, and the hashes of the other branches of the tree.