Level grinding in older Pokemon games is hard. There is no easy way out. However, the steps below will help you train as efficiently as possible in HG/SS.
This answer generally assumes you've completed the game including Kanto, and you have some Pokemon from your playthrough that can be used for switch training (roughly level 55+).
If you're mid-playthrough, refer to this guide. Make use of PokeGear rematches, areas you haven't cleared yet, and Exp. Share for Pokemon that can't fight on their own. Remember trainers give considerably more experience than wild Pokemon. Use fewer Pokemon on your team to spread experience more efficiently.
0: Setup
Before starting, do the following changes to your in-game options to make the grind faster:
- Turn off "battle scene".
- Set text speed to fast.
- When switch training, choose the "switch" battle style instead of "set". This will let you swap back to the Pokemon you're training after every KO in a trainer battle.
After you reach the "solo training" phase below, turn the battle style back to "set", so you see less dialogue boxes.
1: Get a Lucky Egg
Lucky Eggs are tricky to get in HG/SS, but necessary for anyone serious about training Pokemon beyond about level 50. They are available 5% of the time on wild Chansey, which itself only appears at a rate of 1% on Routes 13, 14 and 15. Here are ways to make the process easier:
- Chansey is one of the Pokemon that appears in daily swarms. During swarms, its encounter rate on Route 13 is boosted to 40%, so you can encounter a bunch and use Thief on them. You can also use Compoundeyes to boost the Lucky Egg chance to 20%. To cycle the current swarm, change the DS clock to 23:59 and allow the time to roll over to 00:00 while in-game.
- Learn RNG manipulation and hit a seed + frame that will spit out a Chansey with Lucky Egg. If you are serious about training teams in Gen 4, you will need to learn RNG manipulation anyway.
If you're only interested in training to level 50, then Exp. Share training is a viable alternative to Lucky Egg, so you can skip this step if you want.
2: Passive training
Low-level Pokemon cannot take fights on their own, so they need to be trained using teammates. At this stage, there are two reasonable approaches: a) switch training with the Lucky Egg or b) using the Exp. Share. The Lucky Egg approach is slightly faster overall, but the Exp. Share approach requires less brain power. Suggestions for who to fight:
- The PokeGear lets you rematch overworld trainers with fully evolved Pokemon at fairly high levels. This page shows all the available fights. The best one is PokeManiac Brent on Route 43 on Monday mornings, who has fully-evolved Pokemon at level 58. To activate his rematch, change the DS clock to any time between 4:00 and 9:59 on a Monday. You can repeatedly call Brent and rematch him until 9:59.
- You can rematch Gym Leaders if you call their PokeGear number at the correct time. This page explains how to get the numbers and when to call. (Like with Brent, times can be cheated by changing the DS time according to the day of the week and morning-day-night cycle.) Pick a leader whose Pokemon won't 2HKO your damage dealers while switch training. Blue offers the most experience if your team can take him (six Pokemon around level 70), but the others may be faster since their teams have consistent weaknesses.
- The Pokemon League is a viable option if you already have high level Pokemon (i.e. level 75+) that can clear the battles efficiently. Unless your Pokemon are very high level, you'll need to use the Exp. Share instead of switch training.
Of these three options, pick the hardest that your team is capable of clearing efficiently. If you're only part way though the game, stick to PokeGear rematches (or just keep trying the fight/s you're losing).
Wherever possible, avoid training on wild Pokemon as they award less experience than trainer Pokemon and only go up to around level 50.
3: Solo training
Once your Pokemon can hold its own in battles, you can let it solo entire fights and thus gain all the available experience. This is when the Lucky Egg truly becomes necessary to train with any efficiency. You should start solo training as soon as there are PokeGear battles your Pokemon is capable of clearing on its own.
When your Pokemon is level 50+, it should consistently clear all the regular PokeGear rematches alone -- at this point, you may graduate to the Gym Leader rematches. Pick one that your Pokemon matches favourably against, as this makes the grind faster and effective at earlier levels.
Offensively-inclined Pokemon have a much easier time with solo training, especially ones with setup moves like Swords Dance (which can be used at the start of the fight). If your Pokemon needs a boost, use X-items on it at the start of fights. When your Pokemon is around level 80+, it should be capable of beating the Pokemon League alone with reasonable efficiency, assuming it has boosts described above. If it's having trouble, go back to PokeGear fights.
If you have multiple Pokemon to train, give a second Pokemon the Exp. Share (while your main one holds Lucky Egg). This causes less experience to be handed out in total, but the difference is small enough to where switch training both Pokemon completely separately is slower.
4: Rare Candies (and other tricks)
Use your Rare Candies at level 95+, when leveling up requires the most experience (except for Pokemon in the Erratic experience group). This video shows all the locations. There are repeatable ways to get Rare Candies, but they are inefficient.
TobyOrNotToby's answer has an interesting trick where you can level up your Pokemon overnight using the Day-Care. Actively grinding is faster, but this may be worthwhile if you're a bit desperate. You can also combine your level grinding with ShankzEEVEE's idea to get extra Rare Candies.