Is there a limit to how many levels your hierarchy goes to? This one query should capture all the data you need, up to 5 levels of parent Accounts:
set<Id> parentIds = new set<Id>();
for (Account a : Trigger.new) parentIds.add(a.ParentId);
map<Id, Account> parentaccountswithparentsmap = new map<Id, Account>([select Id, Status__c, Field_to_Copy__c,
ParentId, Parent.Status__c, Parent.Field_to_Copy__c,
Parent.ParentId, Parent.Parent.Status__c, Parent.Parent.Field_to_Copy__c,
Parent.Parent.ParentId, Parent.Parent.Parent.Status__c, Parent.Parent.Parent.Field_to_Copy__c,
Parent.Parent.Parent.ParentId, Parent.Parent.Parent.Parent.Status__c, Parent.Parent.Parent.Parent.Field_to_Copy__c
from Account
where Id in :parentIds]);
Then you just need to check all the levels for each of the triggered Accounts:
for (Account a : Trigger.new)
{
Account ParentAccount = parentaccountswithparentsmap.get(a.ParentId);
if (ParentAccount.Status__c == 'Special')
a.Field_to_Copy__c = ParentAccount.Parent.Field_to_Copy__c;
else if (ParentAccount.Parent.Status__c == 'Special')
a.Field_to_Copy__c = ParentAccount.Parent.Field_to_Copy__c;
else if (ParentAccount.Parent.Parent.Status__c == 'Special')
a.Field_to_Copy__c = ParentAccount.Parent.Parent.Field_to_Copy__c;
else if (ParentAccount.Parent.Parent.Parent.Status__c == 'Special')
a.Field_to_Copy__c = ParentAccount.Parent.Parent.Parent.Field_to_Copy__c;
else if (ParentAccount.Parent.Parent.Parent.Parent.Status__c == 'Special')
a.Field_to_Copy__c = ParentAccount.Parent.Parent.Parent.Parent.Field_to_Copy__c;
}