Towards Transparent Reasoning: What Drives Faithfulness in Large Language Models?