Hi,
The only alternative I can see is to create custom fields of the table "order". That way, the customer can fill them on the checkout.
However, I think it's more messy, and that won't change the fact that you'll have to go to the product page to select the variant before adding the product to the cart.
Now an alternative to products with variants is instead to have several products.
So instead of a "tshirt" product with the variants S, L, M and XL, you could have 4 products "tshirt S", "tshirt L", "tshirt M" and "tshirt XL". That way, no variant selector needed and the add to cart buttons can be displayed on the listings with the custom item fields.