Take a look @ Disable payment options-only cash on delivery for particular product-magento
Using payment_method_is_active
observer you could load the current checkout session quote and check what city the order is be ship to.
$checkout = Mage::getSingleton('checkout/session')->getQuote();
$shipping = $checkout->getShippingAddress();
$cashOnDeliveryCities = array('city name 1','city name 2',..)
if(in_array($shipping->getCity(), $cashOnDeliveryCities)){
$result->isAvailable = true;
}else{
$result->isAvailable = false;
}