If you have the subnet mask 255.255.255.0 and a class A IP address, the first octet specifies the network, the last is the individual host. So do the middle 2 octets specify the subnet?
Yes, this was correct 30 years ago, when "class A" addresses were still part of the spec. However, they aren't anymore – the address is now fully described by its subnet mask.
That is, if you have the subnet mask 255.255.255.0, then the first 3 octets specify the network and the last octet specifies the host. That's it. The router doesn't care about which octets are "net" and which ones are "subnet".
For example 121.123.124.101/24. Would this mean 123.124 is used by router to find the correct subnet?
No; the whole 121.123.124._ is used by the router to find the correct route. Routers don't think in terms of "subnet IDs" – they take the whole IP address and check it against a route with its netmask.
The actual point of subnetting is to reduce congestion and so that router tables don't have to be huge, right?
That indeed was the original point. When only classful networks existed before subnetting, organizations had to make a choice: if they got a class-B address assignment, they would need to connect everything to a single flat layer-2 network (possibly spanning several buildings or even several cities – linked together through layer-2 bridges); and if they wanted to do internal layer-3 routing, they would need to obtain many class-C's instead, and those class-C's would use up the very limited space in the core routers. Subnetting of course allowed the organization to internally have multiple networks while still publishing just one large route.
(Note that this is different from CIDR and classless allocation of addresses. Subnetting didn't solve the issue of needing to allocate a whole "class B" when an organization only needs maybe 2000 hosts. That's what CIDR deals with – it removes the concept of address classes entirely.)