Then I'd be inclined to throwing in a few tables: component, category, attributes, and attribute values.
table_rifles
* ID
* name
* description
table_rifle_components - association between rifles and their components
* ID
* rifle -> table_rifles
* component -> table_components
table_components - list of all components
* ID
* name
* description
* category -> table_component_category
* common attribute 1
* common attribute 2
* common attribute 3
table_component_categories - list of all component categories
* ID
* name
table_attributes - list of unique attributes for a component/category
* ID
* name
* category -> table_component_category
table_attribute_values - values for the unique attributes of a component
* ID
* component -> table_components
* attribute -> table_attributes
* value
If you're not sure how to read that, can you give some sample data I can demonstrate with?