Salt's aren't added to make guessing a password harder on the front end, they're added to make sure that the storage of the password doesn't leak extra information.
In fact the salt is generated randomly for each password, and stored without any form of obfuscation alongside the password.
Passwords are never stored in a database, only the hash is stored (MD5, SHA1, SHA2* etc).
The MD5 of 'password' is always 286755fad04869ca523320acce0dc6a4
If you just stored the md5 in the password database, you can just look for that string and know that the password there is 'password'.
By adding a salt of '84824' the sum becomes 2ca20e59df3a62e5dc4a3a0037372124. But if you got another database (or another user uses the same password), they may have a random salt of '8999', giving: 4e7a210a07958cfe24138a644cbb7f84
The point is that if an attacker were to get a copy of the password database, the password hashes would be meaningless, you couldn't even tell if 2 or more users were using the same password.
Edit:
In comparison - the mathematical formula you apply can be reversed. If you choose a salt, then XOR the salt with the password hash, then the attacker can just undo the XOR operation and get the original hash, at which point rainbow tables are extremely useful.
If you think the mathematical formula can't be reversed, there's a chance that you're actually loosing data, and that you're mapping multiple passwords to the same final hash. This actually multiplies the chance that the attacker will find a password for the hash, since any of the appropriate passwords will work.
If you're XOR'ing and keeping the XOR value secure, then it's just an extra secret that needs to be kept somewhere divulging that secret effectively looses all your passwords (again due to rainbow tables). With salts there's no additional secrets, the operation cannot be reversed, but can be repeated, and each password needs to be attacked individually.
Edit: Of course this is now thoroughly relevant: I just logged in as you