That structure is standard for listing sites - nothing wrong with using a consistent template for each horse page. The key is ensuring the variations that matter are optimised.
for ALT text: yes, avoid boilerplate. Every image needs a distinct, descriptive string. I'd suggest something like "Aron jumping over 1.20m oxer at Hickstead" - specific enough for accessibility and context, but not keyword-stuffed. Also worth running those ALT attributes through the Lighthouse accessibility audit, it'll flag any duplicates.
Descriptions don't need to be Pulitzer-worthy, but they should be structured. I've seen horse listing pages where the description is just a single paragraph of fluff. Instead, break it down into clear sections: Pedigree, Training Level, Temperament, Competition Record. Those natural variations in content are what the search engines latch onto, especially if you wrap them in semantic HTML (headings, lists).
One thing I'd add: if your CMS allows structured data, consider using Product or IndividualProduct schema with hasMerchantReturnPolicy and shippingDetails - not sure how many horse sellers do that, but it's a clear signal to Google that the page is a listing, not just a blog post. Even if it's only horses for sale, that schema can surface rich snippets.
And yes, "rider level" and "bloodline" are exactly the kind of details that differentiate pages. Each horse's lineage is unique - that's built-in SEO juice you just have to structure correctly. no need for artificial uniqueness beyond that.