the findAll loops over each record, then the collect loops over each record, then unique loops over each record again.
Try...
Set result = [] as Set
for(element in crmMapping) {
if(element.get("ATTRIBUTE") == attribute) {
result << element.INTEGRATION_TAG
}
}
return (result as ArrayList)
This will only loop once it it will be unique as it was added to a Set