I don't think I'm alone when I say problem-solving —even if it's not novel— in an efficient way is something most software developers live for.
Part of this is learned and honed with experience. Part comes from a drive to solve [any] problems, even simple puzzles. I truly believe you can learn everything there is to know about programming, but if that's not your passion, you're never going to thrive.
To answer your questions:
1. Your aim to become a top-tier company programmer will never happen at the moment. They only hire passionate programmers who love their work. You can't expect to be hired and then get passionate.
2+3. Stop focusing on study and GPAs. That's done. BUILD SOMETHING for yourself to get some experience doing something you have a vested interest in, not under test conditions. Improve it. Ask other people how you can improve it.
Once you have something that's yours, you might be able to display some passion in an interview (as well as having gained some "real" experience).
If you can't muster even that much enthusiasm for the subject, perhaps it's time to look elsewhere. It's not for everybody.