If you are using the generated value as a "key" which is sent to the browser as a cookie and also references data on the server which is never sent to the browser, then yes it somewhat secure but is overcomplicated. If this is the case, you do not need to include the username. Why not make the data entirely random every time? You could accomplish the same thing with:
sha1(uniqid())
This has better performance too since there is only one hashing algorithm at play. MD5 should not be used for anything, so I would use sha1 unless tight performance was required.
(Added in edit #1) If this is what you are doing, then when you store the authentication record in the database, you should keep track of what time it was created, and enforce that it will only live during a particular lifetime. Providing an "infinite authentication" mechanism is always insecure, and providing a time-limited authentication scheme is a hedge bet, one which we all use every day with the cookies in our browsers which expire over time on the server, so even if the value of the cookie becomes known to an attacker later, it is not possible to access the resources on the server beyond the intended time period.
If you are however attempting to store both a username and a password in a cookie as a hash, then that approach is highly insecure. If I am an attacker and I know the scheme at play, I can brute-force the hashes to produce the usernames and passwords involved. This takes time, but is quite feasible. It does not matter what kind of "combinations" of hashes you choose as the developer. In fact, the more you attempt to combine cryptographic solutions in the interest of making it "more secure" will likely reduce the security of your system.