What is wrong with simply using a random salt? Other than your method doesn't require the salt to be stored with hashed password, I can't think of any advantages.
A hash of the username and password concatenated together should be okay. Since the password is secret the hash of the username and password will be unpredictable. However, as others have mentioned, there could be a security issue if there are two websites using the same algorithm, and someone using those websites uses the same credentials for both (i.e. looking at their hashed passwords we can tell they use the same password for each website). Adding the domain of your site should get around this. For example (+ is concatenation):
salt = hash(domain + username + password)
All of that being said, I would strongly recommend using a cryptographic random number generator to generate your salt since it's the standard practice for salt generation.