I'm completely sure, I only know Heartgold but they have such a similar way to get things, After getting your seventh badge, go to Goldenrod City's radio station, team rocket will be there, beat ALL of team rocket, (INCLUDING THE EXECUTIVE!) someone will give you the rainbow wing.
In Silver and Soulsilver: go to Pewter City and talk to a man. The man will give you a Rainbow wing. In Silver Ho-oh will be Lv 70, so take Pokemon near its level.; In Soulsilver HO-OH is level 75! BE CAREFUL! My advice is to catch LUGIA with a great ball and catch HO-OH with your Master Ball. (unless you have cheats, then you can catch all Pokemon with a pokeball.)
You get the Rainbow Wing from an npc called Old Man in Pewter City.
In Pokemon HeartGold the rainbow wing can be obtained when you defeat Team Rocket at Goldenrod City, an event following on from the previous defeat of Team Rocket at Mahogany Town.
Chat with our AI personalities
In navel Rock
You receive it after rescuing the Radio President
Talk to an old man in pewter city.
You get the rainbow wing from the radio tower director after you get rid of team rocket. (Same thing in soul silver).
Talk to the man standing by the entrance to Mount Moon, and he will give you the Rainbow Wing (Silver Version) or the Silver Wing (Gold Version)