For all intents and purposes, division and tiers do not exist as far as the matchmaker is concerned. It only cares about MMR. Divisions and tiers exist because humans are more comfortable using that instead of a plain old number to gauge the relative skill of a player. While MMR is supposed to be matched to a tier/division, the truth is, the tier/division lags behind MMR. The LP system is designed to match a player's MMR to a tier and division but it takes time for it to place a player at the right tier/division.
As for your situation, with a Gold 2 being matched with Silver 3, it means one of two things, the Silver player's MMR is much much higher and the LP system hasn't yet been able to place you there yet. If you're gaining anything above 21 LP per win then it means your MMR is very high. This is why you gain so much LP, it's trying to get you to your real rank faster. The other possibility is that the Gold 2 player's MMR is quite low. In his case, he will be losing more LP per lose that he gains per win. This is the system trying to push him down to his real rank faster.
TLDR; Don't worry about the tier/division of your opponents. It little more than an aesthetic to please human eyes.
EDIT: Forgot to mention, premades can cause you to see higher or lower ranked players in your games too. But the same applies. The system averages the MMR of all the players on team so games would still be fair. If you have a higher ranked player on your team then the average MMR of your entire team goes up. Another thing is if there is a real Gold 2 player on the other team then his opponents would be much lower skilled than him by way of this same averaging system. They lower players would "weigh down" so to speak, the average MMR of their team to the Silver level.