[Edited: I think that Theoretical Economist is right in highlighting that I'm perpetuating the confusion between the mathematical formalism, and one way of getting to the intuitive understanding. It also comes down to language referring to the slope of the curve versus effects that are positive or negative depending on moving up or down that negatively-sloped curve. So I clarified the table and text consistently against a price rise and Slutsky.]
I think your intuition is correct, but the derivatives have slopes in the other direction in Slutsky's equation. And it's Slutsky's equation that's ultimately given us this theoretical framework, so let's stick with that here ;)
To be clearer, let's discuss for a Price RISE:
Normal Good: Demand- = Substitution-- Income- [Same direction]
Inferior Good: Demand- = Substitution-- Income+ [S > I]
Giffen Good: Demand+ = Substitution-- Income++ [I > S, weirdly]
I start my understanding of this with the demand curve. Under the “usual” laws of supply and demand, the demand-curve is backward-sloping, so as the price rises, we demand less of it. This is the Ecos101 curve we're familiar with; and it applies both to normal and inferior goods. But for Giffen goods, the demand curve has a positive slope... As the price rises, we actually demand more of it. Usually, examples of luxury goods are given as Giffen goods. The argument runs that as price is an indicator of quality and wealth of the purchaser, people actually by more of these goods as the price rises. The actual empirical evidence for the existence of Giffen goods in the real world, though, is slim and hotly debated... Sorry Apple!
So we understand the demand curves are backwards for normal/inferior, but upwards for Giffens. Why?
It was Slutsky who best disentangled demand curves as comprising an income effect and a substitution effect through a synthesis Marshall and Hicks' respective demand curves. (These are the uncompensated and compensated curves per the comments below.)
Per Slutsky's equation, Theoretical Economist is correct: The substitution effect can only ever be negative / downward-sloping. That leaves only the income effect to explain the differences between the three types of goods.
The link is that as the price of a good rises, in effect income falls. For normal goods, as effective income falls, we demand less of the good. For inferior goods, as income falls, we demand more of the good. Typical examples of inferior goods include staple foods. The idea is that as we get poorer, we cannot afford “rich” foods like meats, exotic fruits, chocolate, and so on; but must "downgrade" to cheaper foods.
Giffen is where things can get counter-intuitive. As the price of a Giffen good rises, even though effectively our income falls, we demand the good so much more that it outweighs the (always-negatively-sloped) substitution effect to yield the total positive demand.
I hope that's both more formal and clearer to understand.
Regarding your final question, the intuitive understanding around the increase/decrease in substitutions based on price rises/falls can be confusing against the fact that the slope of the substitution term in Slutsky is always negative.
From a mathematical perspective, the slope of substitution is always negative, but we can move "up" or "down" that curve to produce "positive" or "negative" changes... More or less substitution of a good.
For the second part of your question about the constancy of these effects; goods can apparently change between being normal/inferior. So if we do as we typically do in economics classes and draw out demand curves and indifference curves as straight lines, it holds.
But in reality, we know that demand curves are not immutable, straight lines, but can (a) curve and (b) change under exogenous variables. Think of the example of an asset bubble. For a while, the asset may actually look like a Giffen good: The price rises, people demand more as they jump on the bandwagon. Suddenly, the bubble bursts, and that asset is “demoted” to being a normal good (just as everyone’s income is decreasing... oops!)