If I understand your question correctly, you want a to be a complex type with elements b or c, but also possible to be just TEXT. This can be achieved by using a choice element.
Take a look at this. With minOccurs you can specify how many times you at least want this element to occur. Put it to 0 to make the field optional.
EDIT: This is a solution, I tested it for the xml in the question and it works. You should use the mixed="true field"
<xs:element name="a">
<xs:complexType mixed="true">
<xs:choice>
<xs:element minOccurs="0" ref="b"/>
<xs:element minOccurs="0" ref="c"/>
</xs:choice>
<xs:attribute name="name" type="xs:string" />
</xs:complexType>
</xs:element>